- 相關(guān)推薦
數(shù)據(jù)庫查詢優(yōu)化規(guī)劃
畢業(yè)論文是結(jié)束大學(xué)學(xué)習(xí)生活走向社會的一個中介和橋梁。畢業(yè)論文是大學(xué)生才華的第一次顯露,是向祖國和人民所交的一份有份量的答卷,是投身社會主義現(xiàn)代化建設(shè)事業(yè)的報到書。下面文書幫小編就為大家?guī)碛嬎銠C(jī)畢業(yè)論文范文一篇,希望大家喜歡!
摘要:數(shù)據(jù)庫系統(tǒng)是管理信息系統(tǒng)的核心,是銀行、企業(yè)、政府等眾多部門最為重要的應(yīng)用。而應(yīng)用當(dāng)中,查詢操作是重中之重,并且查詢操作往往需要花費(fèi)時間和空間等資源。所以它的效率高低就很大程度上決定了數(shù)據(jù)庫的在整體效率,同時也決定了系統(tǒng)的效率。本文重點(diǎn)圍繞數(shù)據(jù)庫的查詢優(yōu)化從需求分析、設(shè)計到使用等多方面提出了技術(shù)改進(jìn)和利用。
關(guān)鍵詞:數(shù)據(jù)庫;優(yōu)化;規(guī)范;查詢
隨著數(shù)據(jù)庫技術(shù)的發(fā)展,越來越多的數(shù)據(jù)庫應(yīng)用系統(tǒng)和信息管理系統(tǒng)被開發(fā)、使用。而很多數(shù)據(jù)庫應(yīng)用系統(tǒng)和信息管理系統(tǒng)中,查詢功能的要求是必不可少的,也是所占的比例最大的。數(shù)據(jù)庫的查詢功能優(yōu)化規(guī)劃好的話,整個系統(tǒng)的效率會有很大的提高,由此可見查詢優(yōu)化規(guī)劃的重要性。要想整個數(shù)據(jù)庫的查詢得到很大程度的優(yōu)化,就必須要從需求、設(shè)計到使用都要進(jìn)行規(guī)劃和技術(shù)改進(jìn)。
一、詳細(xì)的需求分析是優(yōu)化的基礎(chǔ)
數(shù)據(jù)庫設(shè)計是從系統(tǒng)的需求出發(fā),結(jié)合軟硬件相關(guān)要求,設(shè)計合理能否符合系統(tǒng)需要功能的數(shù)據(jù)的集合。數(shù)據(jù)庫設(shè)計中最基本的是數(shù)據(jù)庫模式的設(shè)計。但是,設(shè)計一個完善的比較優(yōu)秀的數(shù)據(jù)庫系統(tǒng)往往是一個反復(fù)且周期性的過程。
二利用規(guī)范化是優(yōu)化的關(guān)鍵
在數(shù)據(jù)庫的設(shè)計周期中,需要進(jìn)行邏輯結(jié)構(gòu)設(shè)計,這個時候必須進(jìn)行關(guān)系模式的規(guī)范化來達(dá)到優(yōu)化數(shù)據(jù)庫的目的。所謂關(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)系操作時會有3個問題:1.冗余度大;2.插入異常;3.刪除異常。
規(guī)范化理論認(rèn)為,關(guān)系中的各屬性是相互關(guān)聯(lián)的,他們互相依賴、互相制約,構(gòu)成一個結(jié)構(gòu)嚴(yán)謹(jǐn)?shù)恼w。按照屬性間相關(guān)的關(guān)系,可大概分類為函數(shù)依賴、多值依賴和連接依賴。其中按照函數(shù)依賴又可分為部分依賴、完全依賴和傳遞依賴,根據(jù)這三類函數(shù)依賴等可得到規(guī)范化等級主要有5種,即第1范式(1NF),第2范式(2NF),第3范式(3NF),BC范式(BCNF)和第4范式(4NF),滿足這些范式條件的關(guān)系模式可在不同程度上避免冗余、插入和更新異常問題。
那么如何進(jìn)行規(guī)范化呢?具體做法是:確定數(shù)據(jù)依賴,按照數(shù)據(jù)依賴的理論,逐一分析這組關(guān)系模式,確定他們屬于第幾范式,進(jìn)行模式分解,逐步消除非主屬性對碼的部分依賴和傳遞依賴。在分解過程當(dāng)中必須遵守以下2條原則:
1.無損分解原則 無損分解就是在關(guān)系分解過程中,既不丟失數(shù)據(jù)也不增加數(shù)據(jù),同時還能保持原有的函數(shù)依賴。
2.相互獨(dú)立原則 所謂獨(dú)立是指分解后的新關(guān)系之間相互獨(dú)立,對一個關(guān)系內(nèi)容的修改不應(yīng)該影響到另一關(guān)系。
三、規(guī)范化的收尾工作
關(guān)系分解必須從實(shí)際出發(fā),并不是范式等級越高,分解得越細(xì)就越好。若把關(guān)系分解得過于瑣碎,雖然對于消除數(shù)據(jù)冗余和更新異常等有好處,但在進(jìn)行查詢操作時往往又需要進(jìn)行鏈接,降低查詢效率。相反的若是范式等級太低,雖有利于查詢,但會造成相關(guān)數(shù)據(jù)冗余、更新異常等情況。因此我們應(yīng)該根據(jù)實(shí)際應(yīng)用進(jìn)行相關(guān)范式的設(shè)計。
(四)查詢使用中的優(yōu)化技術(shù)
應(yīng)用項(xiàng)目的實(shí)施中,許多程序員在利用一些前端數(shù)據(jù)庫開發(fā)工具開發(fā)數(shù)據(jù)庫應(yīng)用程序時,只注重用戶界面的華麗,并不重視查詢語句的效率問題,導(dǎo)致所開發(fā)出來的應(yīng)用系統(tǒng)效率低下,資源浪費(fèi)嚴(yán)重。因此,如何設(shè)計高效合理的查詢語句就顯得非常重要。
實(shí)際應(yīng)用中許多程序員認(rèn)為查詢優(yōu)化是DBMS的任務(wù),與程序員所編寫的SQL語句關(guān)系不大,這是錯誤的。一個好的查詢計劃往往可以使程序性能提高數(shù)十倍。查詢計劃是用戶所提交的SQL語句的集合,查詢規(guī)劃是經(jīng)過優(yōu)化處理之后所產(chǎn)生的語句集合。在實(shí)際的數(shù)據(jù)庫產(chǎn)品的高版本中都是采用基于代價的優(yōu)化方法,這種優(yōu)化能根據(jù)從系統(tǒng)字典表所得到的信息來估計不同的查詢規(guī)劃的代價,然后選擇一個較優(yōu)的規(guī)劃。雖然現(xiàn)在的數(shù)據(jù)庫產(chǎn)品在查詢優(yōu)化方面已經(jīng)做得越來越好,但由用戶提交的SQL語句是系統(tǒng)優(yōu)化的基礎(chǔ),很難設(shè)想一個原本糟糕的查詢計劃經(jīng)過系統(tǒng)的優(yōu)化之后會變得高效,因此用戶所寫語句的優(yōu)劣至關(guān)重要。下面重點(diǎn)說明改善用戶查詢計劃的常用解決方案。
1.合理使用索引
索引是數(shù)據(jù)庫中重要的數(shù)據(jù)結(jié)構(gòu),它的根本目的就是為了提高查詢效率,F(xiàn)在大多數(shù)的數(shù)據(jù)庫產(chǎn)品都采用IBM最先提出的ISAM索引結(jié)構(gòu)。索引的使用要恰到好處,其使用原則如下:
●在經(jīng)常進(jìn)行連接,但是沒有指定為外鍵的列上建立索引,而不經(jīng)常連接的字段則由優(yōu)化器自動生成索引。
●在頻繁進(jìn)行排序或分組的列上建立索引。
●在條件表達(dá)式中經(jīng)常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引。比如在雇員表的“性別”列上只有“男”與“女”兩個不同值,因此就無必要建立索引。如果建立索引不但不會提高查詢效率,反而會嚴(yán)重降低更新速度。如果待排序的列有多個,可以在這些列上建立復(fù)合索引(compound index)。
2.避免或簡化排序
應(yīng)當(dāng)簡化或避免對大型表進(jìn)行重復(fù)的排序。當(dāng)能夠利用索引自動以適當(dāng)?shù)拇涡虍a(chǎn)生輸出時,優(yōu)化器就避免了排序的步驟。
3.消除對大型表行數(shù)據(jù)的順序存取
在嵌套查詢中,對表的順序存取對查詢效率可能產(chǎn)生致命的影響。比如采用順序存取策略,一個嵌套3層的查詢,如果每層都查詢1000行,那么這個查詢就要查詢10億行數(shù)據(jù)。避免這種情況的主要方法就是對連接的列進(jìn)行索引。還可以使用并集來避免順序存取。
4.避免相關(guān)子查詢
一個列的標(biāo)簽同時在主查詢和where子句中的查詢中出現(xiàn),那么很可能當(dāng)主查詢中的列值改變之后,子查詢必須重新查詢一次。查詢嵌套層次越多,效率越低,因此應(yīng)當(dāng)盡量避免子查詢。如果子查詢不可避免,那么要在子查詢中過濾掉盡可能多的行。
5.避免困難的正規(guī)表達(dá)式
LIKE關(guān)鍵字支持通配符匹配,技術(shù)上叫正規(guī)表達(dá)式。但這種匹配特別耗費(fèi)時間。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”
即使在zipcode字段上建立了索引,在這種情況下也還是采用順序掃描的方式。如果把語句改為SELECT * FROM customer WHERE zipcode >“98000”,在執(zhí)行查詢時就會利用索引來查詢,顯然會大大提高速度。
6.使用臨時表加速查詢
把表的一個子集進(jìn)行排序并創(chuàng)建臨時表,有時能加速查詢。它有助于避免多重排序操作,而且在其他方面還能簡化優(yōu)化器的工作。
7.盡量不要使用or
使用or會引起全表掃描,將大大降低查詢效率。
8.字段提取要按照“需多少、提多少”的原則
避免“select *”,盡量使用“select 字段1,字段2,字段3........”。實(shí)踐證明:每少提取一個字段,數(shù)據(jù)的提取速度就會有相應(yīng)的提升。提升的速度還要看您舍棄的字段的大小來判斷
五、結(jié)語
數(shù)據(jù)庫查詢優(yōu)化是一項(xiàng)綜合性工作,受到各種各樣因素的制約,有些要求往往是彼此矛盾的。因此設(shè)計者必須根據(jù)實(shí)際情況,綜合應(yīng)用上述技術(shù),在基本合理的總體設(shè)計的基礎(chǔ)上,對數(shù)據(jù)庫查詢做一些優(yōu)化調(diào)整,力求最大限度地提高操作效率,減少異常等,滿足用戶各種各樣的要求,實(shí)現(xiàn)數(shù)據(jù)庫的查詢優(yōu)化設(shè)計。
參考文獻(xiàn):
[1]薩師煊.數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社,2000
[2]王能斌.數(shù)據(jù)庫系統(tǒng)原理[M].北京:電子工業(yè)出版社,2000
[3]李芳.關(guān)系數(shù)據(jù)庫設(shè)計的優(yōu)化技術(shù)[J].現(xiàn)代電子技術(shù),2003,9
[4]袁長河.Sybase SQLserver性能優(yōu)化技術(shù)初探[J].計算機(jī)系統(tǒng)應(yīng)用,2000,1
【數(shù)據(jù)庫查詢優(yōu)化規(guī)劃】相關(guān)文章:
優(yōu)化的方案04-09
關(guān)于優(yōu)化方案04-01
seo優(yōu)化排名03-06
搜狗seo優(yōu)化03-03
有關(guān)優(yōu)化方案11-18
優(yōu)化的方案14篇04-13
優(yōu)化營商簡報03-09
“優(yōu)化發(fā)展環(huán)境”標(biāo)語08-03