解析目前數據庫查詢優化規劃問題
時間:2022-01-26 02:50:00
導語:解析目前數據庫查詢優化規劃問題一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
摘要:數據庫系統是管理信息系統的核心,是銀行、企業、政府等眾多部門最為重要的應用。而應用當中,查詢操作是重中之重,并且查詢操作往往需要花費時間和空間等資源。所以它的效率高低就很大程度上決定了數據庫的在整體效率,同時也決定了系統的效率。本文重點圍繞數據庫的查詢優化從需求分析、設計到使用等多方面提出了技術改進和利用。
關鍵詞:數據庫;優化;規范;查詢
隨著數據庫技術的發展,越來越多的數據庫應用系統和信息管理系統被開發、使用。而很多數據庫應用系統和信息管理系統中,查詢功能的要求是必不可少的,也是所占的比例最大的。數據庫的查詢功能優化規劃好的話,整個系統的效率會有很大的提高,由此可見查詢優化規劃的重要性。要想整個數據庫的查詢得到很大程度的優化,就必須要從需求、設計到使用都要進行規劃和技術改進。
一、詳細的需求分析是優化的基礎
數據庫設計是從系統的需求出發,結合軟硬件相關要求,設計合理能否符合系統需要功能的數據的集合。數據庫設計中最基本的是數據庫模式的設計。但是,設計一個完善的比較優秀的數據庫系統往往是一個反復且周期性的過程。
二、利用規范化是優化的關鍵
在數據庫的設計周期中,需要進行邏輯結構設計,這個時候必須進行關系模式的規范化來達到優化數據庫的目的。所謂關系規范化就是按統一標準對關系進行優化,從而最大程度上能消除關系數據庫中的數據冗余、添加、刪除和修改等操作異常以提高關系的質量,不好的關系操作時會有3個問題:1.冗余度大;2.插入異常;3.刪除異常。
規范化理論認為,關系中的各屬性是相互關聯的,他們互相依賴、互相制約,構成一個結構嚴謹的整體。按照屬性間相關的關系,可大概分類為函數依賴、多值依賴和連接依賴。其中按照函數依賴又可分為部分依賴、完全依賴和傳遞依賴,根據這三類函數依賴等可得到規范化等級主要有5種,即第1范式(1NF),第2范式(2NF),第3范式(3NF),BC范式(BCNF)和第4范式(4NF),滿足這些范式條件的關系模式可在不同程度上避免冗余、插入和更新異常問題。
那么如何進行規范化呢?具體做法是:確定數據依賴,按照數據依賴的理論,逐一分析這組關系模式,確定他們屬于第幾范式,進行模式分解,逐步消除非主屬性對碼的部分依賴和傳遞依賴。在分解過程當中必須遵守以下2條原則:
1.無損分解原則無損分解就是在關系分解過程中,既不丟失數據也不增加數據,同時還能保持原有的函數依賴。
2.相互獨立原則所謂獨立是指分解后的新關系之間相互獨立,對一個關系內容的修改不應該影響到另一關系。
三、規范化的收尾工作
關系分解必須從實際出發,并不是范式等級越高,分解得越細就越好。若把關系分解得過于瑣碎,雖然對于消除數據冗余和更新異常等有好處,但在進行查詢操作時往往又需要進行鏈接,降低查詢效率。相反的若是范式等級太低,雖有利于查詢,但會造成相關數據冗余、更新異常等情況。因此我們應該根據實際應用進行相關范式的設計。
四、查詢使用中的優化技術
應用項目的實施中,許多程序員在利用一些前端數據庫開發工具開發數據庫應用程序時,只注重用戶界面的華麗,并不重視查詢語句的效率問題,導致所開發出來的應用系統效率低下,資源浪費嚴重。因此,如何設計高效合理的查詢語句就顯得非常重要。
實際應用中許多程序員認為查詢優化是DBMS的任務,與程序員所編寫的SQL語句關系不大,這是錯誤的。一個好的查詢計劃往往可以使程序性能提高數十倍。查詢計劃是用戶所提交的SQL語句的集合,查詢規劃是經過優化處理之后所產生的語句集合。在實際的數據庫產品的高版本中都是采用基于代價的優化方法,這種優化能根據從系統字典表所得到的信息來估計不同的查詢規劃的代價,然后選擇一個較優的規劃。雖然現在的數據庫產品在查詢優化方面已經做得越來越好,但由用戶提交的SQL語句是系統優化的基礎,很難設想一個原本糟糕的查詢計劃經過系統的優化之后會變得高效,因此用戶所寫語句的優劣至關重要。下面重點說明改善用戶查詢計劃的常用解決方案。
1.合理使用索引
索引是數據庫中重要的數據結構,它的根本目的就是為了提高查詢效率。現在大多數的數據庫產品都采用IBM最先提出的ISAM索引結構。索引的使用要恰到好處,其使用原則如下:
●在經常進行連接,但是沒有指定為外鍵的列上建立索引,而不經常連接的字段則由優化器自動生成索引。
●在頻繁進行排序或分組的列上建立索引。
●在條件表達式中經常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引。比如在雇員表的“性別”列上只有“男”與“女”兩個不同值,因此就無必要建立索引。如果建立索引不但不會提高查詢效率,反而會嚴重降低更新速度。如果待排序的列有多個,可以在這些列上建立復合索引(compoundindex)。
2.避免或簡化排序
應當簡化或避免對大型表進行重復的排序。當能夠利用索引自動以適當的次序產生輸出時,優化器就避免了排序的步驟。
3.消除對大型表行數據的順序存取
在嵌套查詢中,對表的順序存取對查詢效率可能產生致命的影響。比如采用順序存取策略,一個嵌套3層的查詢,如果每層都查詢1000行,那么這個查詢就要查詢10億行數據。避免這種情況的主要方法就是對連接的列進行索引。還可以使用并集來避免順序存取。
4.避免相關子查詢
一個列的標簽同時在主查詢和where子句中的查詢中出現,那么很可能當主查詢中的列值改變之后,子查詢必須重新查詢一次。查詢嵌套層次越多,效率越低,因此應當盡量避免子查詢。如果子查詢不可避免,那么要在子查詢中過濾掉盡可能多的行。
5.避免困難的正規表達式
LIKE關鍵字支持通配符匹配,技術上叫正規表達式。但這種匹配特別耗費時間。例如:SELECT*FROMcustomerWHEREzipcodeLIKE“98___”即使在zipcode字段上建立了索引,在這種情況下也還是采用順序掃描的方式。如果把語句改為SELECT*FROMcustomerWHEREzipcode>“98000”,在執行查詢時就會利用索引來查詢,顯然會大大提高速度。
6.使用臨時表加速查詢
把表的一個子集進行排序并創建臨時表,有時能加速查詢。它有助于避免多重排序操作,而且在其他方面還能簡化優化器的工作。
7.盡量不要使用or使用or會引起全表掃描,將大大降低查詢效率。
8.字段提取要按照“需多少、提多少”的原則
避免“select*”,盡量使用“select字段1,字段2,字段3........”。實踐證明:每少提取一個字段,數據的提取速度就會有相應的提升。提升的速度還要看您舍棄的字段的大小來判斷。
五、結語
數據庫查詢優化是一項綜合性工作,受到各種各樣因素的制約,有些要求往往是彼此矛盾的。因此設計者必須根據實際情況,綜合應用上述技術,在基本合理的總體設計的基礎上,對數據庫查詢做一些優化調整,力求最大限度地提高操作效率,減少異常等,滿足用戶各種各樣的要求,實現數據庫的查詢優化設計。
參考文獻:
[1]薩師煊.數據庫系統概論[M].北京:高等教育出版社,2000
[2]王能斌.數據庫系統原理[M].北京:電子工業出版社,2000
[3]李芳.關系數據庫設計的優化技術[J].現代電子技術,2003,9
[4]袁長河.SybaseSQLserver性能優化技術初探[J].計算機系統應用,2000,1
- 上一篇:剖析營銷角度下的中醫院發展戰略論文
- 下一篇:探求企業物流管理與市場營銷有機結合論文