亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        數(shù)據(jù)庫查詢優(yōu)化之我見

        2013-12-31 00:00:00曹軍
        2013年11期

        摘要:本文重點(diǎn)圍繞數(shù)據(jù)庫的查詢優(yōu)化,從設(shè)計(jì)、管理和使用三方面著手,針對如何縮短大數(shù)據(jù)量的查詢處理時間和提高數(shù)據(jù)庫應(yīng)用系統(tǒng)效率的問題,提出了相應(yīng)的優(yōu)化策略。本文首先分析了規(guī)范良好的數(shù)據(jù)庫系統(tǒng)的設(shè)計(jì)對優(yōu)化的影響;然后介紹了如何通過數(shù)據(jù)庫的基本管理達(dá)到優(yōu)化的目的;最后分析編寫恰當(dāng)?shù)腟QL語句進(jìn)行優(yōu)化的通用策略和原則,通過相應(yīng)的解釋加深讀者對這些策略和方法的理解。

        關(guān)鍵詞:數(shù)據(jù)庫;優(yōu)化;查詢

        一、引言

        由于數(shù)據(jù)庫技術(shù)的不斷創(chuàng)新和發(fā)展,數(shù)據(jù)庫技術(shù)被越來越多的應(yīng)用,而且也不斷地開發(fā)出新的數(shù)據(jù)庫應(yīng)用系統(tǒng)和信息管理系統(tǒng)。而在數(shù)據(jù)庫應(yīng)用系統(tǒng)和信息管理系統(tǒng)的眾多功能里面,必不可少的一向功能就是查詢,查詢功能也是數(shù)據(jù)庫系統(tǒng)和信息管理系統(tǒng)中占最大比例的功能。數(shù)據(jù)庫的查詢功能對于整個數(shù)據(jù)庫系統(tǒng)的效率有很大的影響,優(yōu)化好的查詢功能可以有效的提高效率,由此可見查詢優(yōu)化規(guī)劃的重要性。只有從需求、設(shè)計(jì)到使用等環(huán)節(jié)都做好相應(yīng)的規(guī)劃和技術(shù)改進(jìn),才能最大程度的優(yōu)化整個數(shù)據(jù)的查詢功能。

        二、數(shù)據(jù)庫設(shè)計(jì)優(yōu)化

        數(shù)據(jù)庫的設(shè)計(jì)是否優(yōu)良從根本上決定了數(shù)據(jù)庫查詢效率的好壞,因此要提高數(shù)據(jù)庫的查詢效率首先就應(yīng)該從數(shù)據(jù)庫需求分析階段入手。

        1.詳細(xì)的需求分析是優(yōu)化的基礎(chǔ)

        數(shù)據(jù)庫設(shè)計(jì)是從系統(tǒng)的需求出發(fā),結(jié)合軟硬件相關(guān)要求,設(shè)計(jì)符合系統(tǒng)需要功能的數(shù)據(jù)的集合。數(shù)據(jù)庫模式的設(shè)計(jì)是數(shù)據(jù)庫設(shè)計(jì)中最基本的環(huán)節(jié),可以使用E-R圖對數(shù)據(jù)庫模式的設(shè)計(jì)進(jìn)行建模。但是,往往需要經(jīng)歷一個反復(fù)且周期性的過程才能完善的設(shè)計(jì)出一個較為優(yōu)秀的數(shù)據(jù)庫系統(tǒng)。

        2.數(shù)據(jù)庫規(guī)范化是優(yōu)化的關(guān)鍵

        邏輯結(jié)構(gòu)設(shè)計(jì)在數(shù)據(jù)庫的設(shè)計(jì)周期中是必須要開展的,在這一設(shè)計(jì)中,為了達(dá)到優(yōu)化數(shù)據(jù)庫的目的必須規(guī)范關(guān)系模式。所謂關(guān)系規(guī)范化就是按統(tǒng)一標(biāo)準(zhǔn)對關(guān)系進(jìn)行優(yōu)化,從而最大程度上消除關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)冗余,消除添加、刪除和修改等操作異常,以提高關(guān)系的質(zhì)量。冗余度大、插入異常和刪除異常是在操作不好的關(guān)系時經(jīng)常會遇到的三個問題。在規(guī)范化理論中,關(guān)系中的各屬性被認(rèn)為是相互依賴和相互制約的,這樣一個有嚴(yán)謹(jǐn)結(jié)構(gòu)的整體才能構(gòu)成。函數(shù)依賴、多值依賴和連接依賴三種類型大致就是參照屬性間相關(guān)的關(guān)系而分類的,其中按照函數(shù)依賴又可分為部分依賴、完全依賴和傳遞依賴。根據(jù)這三類函數(shù)依賴可得到規(guī)范化等級,主要有5種,即第1范式(1NF),第2范式(2NF),第3范式(3NF),BC范式(BCNF)和第4范式(4NF),滿足這些范式條件的關(guān)系模式可在不同程度上避免冗余、插入和更新異常問題。

        三、數(shù)據(jù)庫管理優(yōu)化

        當(dāng)我們選定數(shù)據(jù)庫管理軟件,完成數(shù)據(jù)庫的實(shí)現(xiàn)后,通過建立索引、存儲過程等數(shù)據(jù)庫管理手段可以進(jìn)一步為提高數(shù)據(jù)庫的查詢效率打下基礎(chǔ)。

        1.合理使用索引

        索引是數(shù)據(jù)庫中重要的數(shù)據(jù)結(jié)構(gòu),提高查詢的效率是設(shè)計(jì)索引的根本目的。索引的使用要恰到好處,其使用原則如下:在經(jīng)常進(jìn)行連接,但是沒有指定為外鍵的列上建立索引,而不經(jīng)常連接的字段則由優(yōu)化器自動生成索引。在頻繁進(jìn)行排序或分組的列上建立索引。在條件表達(dá)式中經(jīng)常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引。比如在雇員表的“性別”列上只有“男”與“女”兩個不同值,因此就無必要建立索引。如果建立索引不但不會提高查詢效率,反而會嚴(yán)重降低更新速度。如果待排序的列有多個,可以在這些列上建立復(fù)合索引(compound index)。

        2.使用存儲過程

        存儲過程是SQL語句和流程控制語句的集合,經(jīng)編譯后存儲在數(shù)據(jù)庫中。用戶通過指定存儲過程名字并給定參數(shù)來執(zhí)行它。如某一操作包含大量的SQL代碼或分別被多次執(zhí)行,那么存儲過程的執(zhí)行速度快很多。因?yàn)榇鎯^程是預(yù)編譯的,只在創(chuàng)建時進(jìn)行編譯,以后每次執(zhí)行存儲過程都不需要重新編譯,而一般SQL語句每執(zhí)行一次就要編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫的運(yùn)行效率。另外,存儲過程保存在數(shù)據(jù)庫中,比起從客戶端發(fā)送SQL語句到數(shù)據(jù)庫服務(wù)器,使用存儲過程節(jié)省了網(wǎng)絡(luò)傳輸?shù)臅r間,這一定程度上提高了數(shù)據(jù)庫的執(zhí)行效率。

        四、SQL語句優(yōu)化

        通過以上手段固然能有效的提高查詢效率,但功能正確而編寫不恰當(dāng)?shù)腟QL語句同樣能降低數(shù)據(jù)庫的查詢效率。以下就如何編寫優(yōu)良的SQL語句做介紹:

        1.在進(jìn)行查詢時,返回的值應(yīng)該是查詢所需要的,即在查詢中應(yīng)該盡量減少對數(shù)據(jù)庫表的訪問列數(shù),使查詢返回的數(shù)據(jù)最小。這就意味著在查詢時,不能過多的使用通配符,如:select*from table1語句,而應(yīng)該做到最小化查詢范圍,要查詢幾列就選擇幾列,如:select col1 from table1。

        2.多數(shù)情況下,當(dāng)用戶并不需要查詢到的所有數(shù)據(jù),而只是部分或靠前的數(shù)據(jù)時,這時我們可以通過SQL語句來限制查詢的結(jié)果,如:select top 50 col1 from table1。

        3.對于一些特殊的SQL語句,在使用時應(yīng)正確選擇。我們用一組例子來說明,如:EXISTS,NOT EXISTS。語句一:select sum(t1.c1) from t1 where (select count(*)from t2 where t2.c2=t1.c2)>0。語句二:select sum(t1.c1) from t1 where exists(select*from t2 where t2.c2=t1.c1)。兩個語句所得到的結(jié)果相同,但語句二的效率要遠(yuǎn)高于語句一,因?yàn)檎Z句一在查詢中產(chǎn)生了大量的索引掃描。在對數(shù)據(jù)庫查詢時,所使用的語句多種多樣,但選擇恰當(dāng)?shù)淖志淠軌蛴行У奶岣卟樵冃省?/p>

        4. WHERE子句在使用時應(yīng)該注意以下的問題:在WHERE子句中對字段進(jìn)行1值判斷,如:select id from t1 where name is 1,使用in、not in、or、!= 或<>,都會導(dǎo)致索引失效而進(jìn)行全表掃描??梢允褂胑xist 和not exist代替in和not in。

        5.充分利用“查詢分析優(yōu)化器”。以下兩個語句是等效的:select * from table1 where name='zhangsan' and tID > 10000和select * from table1 where tID > 10000 and name='zhangsan'。SQL SERVER中有一個“查詢分析優(yōu)化器”,它可以計(jì)算出where子句中的搜索條件并確定哪個索引能縮小表掃描的搜索空間,也就是說,它能實(shí)現(xiàn)自動優(yōu)化。會導(dǎo)致“查詢分析優(yōu)化器”失效的SQL操作有,or、NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等。

        6.不要在 where 子句中的“=”左邊進(jìn)行函數(shù)、算術(shù)運(yùn)算或其他表達(dá)式運(yùn)算,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如:查詢name以abc開頭的id的語句select id from t where substring(name,1,3)='abc'可以改為select id from t where name like 'abc%'。(作者單位:廣安職業(yè)技術(shù)學(xué)院)

        參考文獻(xiàn):

        [1]徐慧.數(shù)據(jù)庫技術(shù)與應(yīng)用.北京:北京理工大學(xué)出版社,2010

        [2](美)克羅恩克等著, 姜玲玲等譯.數(shù)據(jù)庫原理.北京: 清華大學(xué)出版社,2008

        国产精品 亚洲 无码 在线| 亚洲综合一区二区三区天美传媒| 护士人妻hd中文字幕| 中文乱码字幕精品高清国产| 色窝窝无码一区二区三区| 亚洲精品www久久久久久| 亚洲国产一区二区三区视频在线| 中文字幕精品无码一区二区| 国产精品密播放国产免费看| 久久精品国产亚洲婷婷| 久久99国产亚洲高清观看首页| 中文字幕被公侵犯的丰满人妻| 国产人妖视频一区二区| 日本亚洲国产精品久久| 品色堂永远免费| 国产一区日韩二区欧美三区| 精品91亚洲高清在线观看| 亚洲精品一区二区在线播放| 激情五月开心五月av| 久久精品免费中文字幕| 国产精品亚洲lv粉色| 亚洲av无码av制服丝袜在线| 毛片免费在线观看网址| AV在线中出| 亚洲av成人无网码天堂| 少妇被粗大进猛进出处故事| 国产亚洲日韩在线一区二区三区| 亚洲 欧美 激情 小说 另类| 国产在线观看免费一级| 日产一区二区三区的精品| 一本色道久久88加勒比一| 欧美粗大猛烈老熟妇| 麻豆91免费视频| 国产成人精品自拍在线观看| 一区二区三区国产内射| 国模冰莲极品自慰人体| 天天爽夜夜爽夜夜爽| a观看v视频网站入口免费| 日韩精品中文字幕综合| 丰满老熟女性生活视频| 人妻夜夜爽天天爽三区麻豆av网站|