OracleSQL調優是一個復雜的主題,不過有一些基本的規則是每個Oracle DBA都需要遵從的,這些規則可以改善他們系統的性能。
其實,SQL調優的目標是簡單的:
◎消除不必要的大表全表搜索:不必要的全表搜索導致大量不必要的I/O,從而拖慢整個數據庫的性能。調優專家首先要根據查詢返回的行數目來評價SQL。在一個有序的表中,如果查詢返回少於40%的行,或者在一個無序的表中,返回少於7%的行,那麼這個查詢都可以調整為使用一個索引來代替全表搜索。對於不必要的全表搜索來說,最常見的調優方法是增加索引。可以在表中加入標准的B樹索引,也可以加入bitmap和基於函數的索引。要決定是否消除一個全表搜索,可以仔細檢查索引搜索的I/O開銷和全表搜索的開銷,它們的開銷和數據塊的讀取和可能的並行執行有關,並將兩者作對比。在一些情況下,一些不必要的全表搜索的消除可以通過強制使用一個index來達到,只需要在SQL語句中加入一個索引的提示就可以了。
◎在全表搜索是一個最快的訪問方法時,將小表的全表搜索放到緩存中,確保有一個專門的數據緩沖用作行緩沖。
◎確保最優的索引使用:對於改善查詢的速度,這是特別重要的。有時Oracle可以選擇多個索引來進行查詢,技術人員在調優時必須檢查每個索引並且確保Oracle使用正確的索引。它還包括bitmap和基於函數的索引的使用。
◎確保最優的JOIN操作:有些查詢使用NESTEDLOOPjoin快一些,有些則是HASHjoin快一些,另外一些則是sort-mergejoin更快。
這些規則看來簡單,不過它們占SQL調優任務的100%。
索引的設計與優化是OracleSQL中的重要內容,索引是表的一個概念部分,用來提高檢索數據的效率,Oracle使用了一個復雜的自平衡B-tree結構。通常,通過索引查詢數據比全表掃描要快。當Oracle找出執行查詢Update語句的最佳路徑時,Oracle優化器將使用索引。同樣在聯結多個表時使用索引也可以提高效率。另一個使用索引的好處是,它提供了主鍵(primary key)的唯一性驗證。那些Long或Long Raw數據類型, 你可以索引幾乎所有的列。通常,在大型表中使用索引特別有效。當然,你也會發現,在掃描小表時,使用索引同樣能提高效率。