【資料庫】查詢最佳化總結,資料庫查詢總結

來源:互聯網
上載者:User

【資料庫】查詢最佳化總結,資料庫查詢總結
一、合理使用索引

使用原則:

1、經常在查詢中作為條件被使用的列,應為其建立索引。

2、頻繁進行排序或分組group by 或 order by 操作的列,應為其建立索引。

3、一個列值域很大時,應為其建立索引。

4、如果待排序的列有多個,應在這些列上建立符合索引。

5、參與了串連操作的屬性

6、在某一範圍內頻繁搜尋的屬性和按照排序次序平凡檢索的屬性

7、在where子句中包含的一個關係的多個屬性,可以考慮在這些屬性上建立多屬性索引。

此外,如果資料庫檔案需要頻繁執行精確匹配查詢(如等值查詢),可考慮建立散列索引。而B+數等有序索引更適合範圍查詢。


二、避免或簡化排序

在運行Order by或 Group by的SQL語句時,會涉及排序的操作,應當簡化或避免對大型表進行重複的排序,因為排序磁碟的開銷是很大的。降低資料庫效能,而且磁碟排序會消耗暫存資料表空間中的資源。

當能夠利用索引自動以適當次序產生輸出時,最佳化器就可以避免不必要的排序操作。以下是一些影響因素:

1、由於現有索引的不足,導致排序時索引中不包含一個或幾個待排序的列。

2、group by 或order by子句中列的次序與索引的次序不一樣。

為了避免不必要的排序,就要正確地增建索引,合理地合并資料庫表(儘管有時可能影響表的正常化,當相對於效率的提高還是值得的)。如果排序不可避免,那麼應帶試圖簡化它,如縮小排序列的範圍等。


三、消除對大型表行資料的順序存取

在巢狀查詢中,對錶的順序存取對查詢效率可能產生致命的影響。避免這種情況的主要方法就是對串連的列進行索引。還可以使用並集來避免順序存取。儘管在所有的檢查裂傷都有索引,但某些形式的where子句強迫最佳化器使用順序索引。


四、避免相互關聯的子查詢

一個列屬性同時在主查詢和子查詢中同時出現,那麼很可能當住查詢中的列值改變之後,子查詢必須重新查詢一次。查詢嵌套次數越多,效率越低,因此應當盡量避免子查詢。

如果子查詢不可避免,那麼要在子查詢中過濾掉儘可能多的行。


五、避免困難的增則運算式

避免含MATCHES和LIKE關鍵字的增則運算式等。


六、使用暫存資料表加速查詢

把一個表的自己進行排序並建立暫存資料表,有時能加速查詢。它有助於避免多重排序操作,而且在其他方面還能簡化最佳化器的工作。暫存資料表中的行比主表中的行要少,而且順序就是所要求的順序,減少了磁碟的I/O操作,所以查詢工作量可以得到大幅減少。


七、用排序來取代非順序磁碟存取

非順序磁碟存取是最慢的操作。但是在寫SQL語句時往往忽略了這一點,是的在寫應用程式時很容易寫出要求存取大量非順序頁的查詢,導致效率的降低。有些時候,可以使用以資料庫排序功能為基礎的SQL來替代非順序的存取,以改進查詢效率。


八、不充分的串連操作

左(右)串連消耗的資源非常之多,因為它們包含與NULL(不存在)資料匹配的資料,其代價可能非常高。左(右)串連比內串連消耗資源更多,所以如果可以重新編寫查詢,使得該查詢不使用左(右)串連,則會得到非常可觀的回報。


九、預存程序

平時每次向資料庫發送的SQL指令碼,都需要先編譯後執行。這樣當使用相同的語句時效率就會低很多,而預存程序則不需要編譯就能直接執行,因此速度可能更快。所以對於平凡使用的SQL語句建議使用預存程序。另外,要注意預存程序中盡量使用SQ內建的返回參數,而非自訂的返回參數,減少不必要的參數,避免資料冗餘。


十、不要隨意使用遊標

遊標會佔用較多的系統資源,尤其是對於大規模並發量的情況下,很容易使得系統資源耗盡而崩潰。所以不要隨意使用遊標,而且遊標使用完成後應及時關閉和銷毀,以釋放資源。


十一、交易處理

為了保證同時操作多個表而保證資料庫的一致性,往往會用到事務。但是一旦將多個處理放入事務當中,系統的處理速度會有所降低,所以應當在保認證屋一致性的前提下,將頻繁操作的多個可分割的處理過程放入到多個預存程序當中,這樣會大大提高系統的響應速度。









SQL資料庫查詢的最佳化

這個問題太大了,不懂就加記憶體,加CPU,用RAID儲存。
 
Oracle資料庫對SQL查詢做了什最佳化

這麼大的問題? 太大了。 說清楚一本書了。簡單說 背景最佳化處理器,會對 執行計畫,做處理,會分析當前日誌裡面的資料結構,預估出適合的執行計畫。磁碟儲存等都和查詢無關,是自身的結構,最多勉強說對主鍵都自動加了索引而已。索引原理樓主自己去看吧,當做一張表就行了。 不過現在oracle 也開始研究雲端儲存,畢竟是趨勢,過兩年估計會部分實現。雲端儲存可以先看看 hadoop。 執行計畫又和你當前資料庫預設配置有關,具體去看hint吧。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.