SQL 優化關於 or 和 in 的使用區別


突然想總結一下 SQL 里 OR 和 IN 的區別,在翻閱網上很多資料后,根據一位網友的千萬條數據實驗,總結如下:

測試用的數據庫數據為1000W條,共分為四組分別測試;

A組:分別使用 OR 和 IN 查詢3條數據;

B組:分別使用 OR 和 IN 查詢120條數據;

C組:分別使用 OR 和 IN 查詢500條數據;

D組:分別使用 OR 和 IN 查詢1000條數據;

 

實驗開始之前數據庫關閉了Query Cache,因此數據庫緩存不會對查詢造成影響;

第一種情況,目標列為主鍵的情況,4組測試執行計划一樣,執行的時間也基本沒有區別。
A組or和in的執行時間: or的執行時間為:0.002s     in的執行時間為:0.002s
B組or和in的執行時間: or的執行時間為:0.004s     in的執行時間為:0.004s
C組or和in的執行時間: or的執行時間為:0.006s     in的執行時間為:0.005s
D組or和in的執行時間: or的執行時間為:0.017s     in的執行時間為:0.014s

第二種情況,目標列為一般索引的情況,4組測試執行計划一樣,執行的時間也基本沒有區別。
A組or和in的執行時間: or的執行時間為:0.002s     in的執行時間為:0.002s
B組or和in的執行時間: or的執行時間為:0.006s     in的執行時間為:0.005s  
C組or和in的執行時間: or的執行時間為:0.008s     in的執行時間為:0.008s
D組or和in的執行時間: or的執行時間為:0.020s     in的執行時間為:0.019s 

第三種情況,目標列沒有索引的情況,4組測試執行計划就不一樣,執行的時間也有了很大的區別。
A組or和in的執行時間: or的執行時間為:5.016s      in的執行時間為:5.071s
B組or和in的執行時間: or的執行時間為:1min 02s     in的執行時間為:5.018s

C組or和in的執行時間: or的執行時間為:1min 50s     in的執行時間為:5.010s

D組or和in的執行時間: or的執行時間為:6min 13s     in的執行時間為:5.047s

結論:

其實or的效率為O(n),而in的效率為O(log2n),當基數越大時,in的效率就能凸顯出來了。

in和or的效率,取決目標條件列是否有索引或者是否是主鍵,如果有索引或者主鍵性能沒啥差別,如果沒有索引,in的性能要遠遠優於or.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM