淺談資料庫的查詢優化方法分析

才智咖 人氣:2.8W
淺談資料庫的查詢優化方法分析
摘要:本文主要探討了在資料庫的應用中對資料庫查詢優化的一些策略,其中包括基於索引、SQL語句的優化的方法,並簡要對其他一些常用方法做了介紹。 
關鍵詞:資料庫 查詢優化 查詢 優化 
        0 引言 
        隨著計算機應用的深入,計算機技術的成熟,各種應用軟體的普及,應用資料也隨著日常工作而迅速增長,作為資料倉庫的資料庫的重要性也日益顯著。                             
        資料庫系統作為管理資訊系統的核心,各種基於資料庫的聯機事務處理以及聯機分析處理正慢慢的轉變成為計算機應用的最為重要的部分,根據以往大量的應用例項來看,在資料庫的各種操作中,查詢操作所佔的比重最大,而在查詢操作中基於SELECT語句在SQL語句中又是代價最大的語句。如果在使用中採用了優秀的查詢策略,往往可以降低查詢的時間,提高查詢的效率,由此可見查詢優化在資料庫中的重要性。本文就資料庫查詢優化中的策略進行介紹及探索。 
        1 基於索引的優化 
        資料庫的優化方法多種多樣,不同的方法對提高資料庫查詢效率也不相同。 
        索引作為資料庫中的重要資料結構,它的根本目的就是為了提高查詢的效率。而優化查詢的重要方法就是建立索引,建立適合關係資料庫系統的索引,這樣就可以避免表掃描,並減少了因為查詢而造成的輸入輸出開銷,有效提高資料庫資料的查詢速度,優化了資料庫效能。然而在建立索引時也增加了系統時間和空間的開銷。所以建立索引時應該與實際查詢需求相結合,這樣才能實現真正的優化查詢。 
        1.1 判斷並建立必要的'索引 對所要建立的索引進行正確的判斷,使所建立的索引對資料庫的工作效率提高有所幫助。為了實現這一點,我們應做到以下要求:在熟記資料庫程式中的相關SQL語句的前提下,統計出常用且對效能有影響的語句;判斷資料庫系統中哪些表的哪些欄位要建立索引。其次,對資料庫中操作頻繁的表,資料流量較大的表,經常需要與其他表進行連線的表等,要進行重       點關注。這些表上的索引將對SQL語句的效能產生重要的影響。 
        1.2 對索引使用的一些規則 索引的使用在一些大型資料庫系統中會經常使用到,這樣可以有效的提高資料庫效能,使資料庫的訪問速度得到提高。但索引的使用要恰倒好處,所以我們在使用索引時應遵守使用原則:建立索引可以提高資料庫的查詢速度,但索引過多,不但不能實現優化查詢,反而會影響到資料庫的整體效能。索引作為資料庫中實際存在的物件,每個索引都要佔用一定的物理空間。所以對於索引的建立要考慮到物理空間容量,以及所建立索引的必要性和實用性。 
        1.3 合理的索引對SQL語句的意義 索引建立之後,還要確保其得到了真正的使用,發揮了其應有的作用。首先,可以通過SQL語句查詢來確定所建立的索引是否得到了使用,找出沒有使用到的索引。分析索引建立但沒有使用的原因,使其真正發揮作用。其次,索引得到使用以後,是否得到了預期的效果,對資料庫的效能是否實現了真正意義上的提高,只有合理的索引才能真正提高資料庫的效能。 
        2 優化SQL語句 
        在使用索引時可以有效的提高查詢速度,但如果SQL語句使用不恰當的話,所建立的索引就不能發揮其作用。所以我們應該做到不但會寫SQL,還要寫出效能優良的SQL語句。下面,就如何優化引用例子進行說明。  首先,在進行查詢時,返回的值應該是查詢所需要的。在查詢中應該儘量減少對資料庫中的表的訪問行數,使查詢的結果範圍最小,這就意味著在查詢時,不能過多的使用萬用字元,如:select*from table1語句,而應該做到最小化查詢範圍,要查詢幾行幾列就選擇幾行幾列,如:select col1 from table1;多數情況下,使用者並不需要查詢到的所有資料,而只是部分或靠前的資料時,我們也可以通過SQL語句來進行限制查詢的結果,如:select top 50 col1 from table1。 
        其次,對於一些特殊的SQL語句,在使用時應正確選擇。我們用一組例子來說明,如: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) 
        兩個語句所得到的結果相同,但,語句二的效率要遠高於語句一,因為語句一在查詢中產生了大量的索引掃描。 
        在對資料庫查詢時,所使用的語句多種多樣,但選擇恰當的的字句能夠有效的提高查詢效率。 
        最後,WHERE子句在使用時應該注意的問題。 
        在WHERE子句中可以使用exist 和not exist代替in和not in。應該儘量避免使用in,not in,or 或者having。可以使用錶鏈接代替 exist。Having可以用where代替,如果無法代替可以分兩步處理。 
        3 其他優化方法 
        資料庫的查詢優化方法不僅僅是索引和SQL語句的優化,其他方法的合理使用同樣也能很好的對資料庫查詢功能起到優化作用。我們就來列舉幾種簡單實用的方法。 
        3.1 避免或簡化排序 應當簡化或避免對大型表進行重複的排序。當能夠利用索引自動以適當的次序產生輸出時,優化器就避免了排序的步驟。 
        3.2 避免相關子查詢 如果在主查詢和WHERE子句中的查詢中同時出現了一個列的標籤,這樣就會使主查詢的列值改變後,子查詢也必須重新進行一次查詢。因為查詢的巢狀層次越多,查詢的效率就會降低,所以我們應當避免子查詢。如果無法避免,就要在查詢的過程中過濾掉儘可能多的。 
        3.3 建立使用臨時表 在表的一個子集進行排序並建立臨時表,也能實現加速查詢。在一些情況下這樣可以避免多重排序操作。但所建立的臨時表的行要比主表的行少,其物理順序就是所要求的順序,這樣就減少了輸入和輸出,降低了查詢的工作量,提高了效率,而且臨時表的建立並不會反映主表的修改。 
        3.4 用排序來取代非順序存取 磁碟存取臂的來回移動使得非順序磁碟存取變成了最慢的操作。但是在SQL語句中這個現象被隱藏了,這樣就使得查詢中進行了大量的非順序頁查詢,降低了查詢速度,對於這個現象還沒有很好的解決方法,只能依賴於資料庫的排序能力來替代非順序的存取4 結論 
        對於資料庫的優化,我們要抓住關鍵問題,提出改善查詢效率,這樣才能真正使資料庫服務得到根本提高。本文在對資料庫查詢優化的方法上,進行了分析,提出了部分見解,有效的提高資料庫查詢效率。 
參考文獻: 
[1]王珊,孟小峰 《資料庫系統導論(第七版)》 機械工業出版社.2000年10月 
[2]王磊,王熙寧 《網上考試系統的效能與安全分析》.情報科學.2004年22期. 
[3]Abnhrmx Silbersehaa《資料庫系統概念》.機械工業出版社2006年10月.