SQL優化關於or與in使用

網上有不少人都在談論or與in的使用,有的說兩者沒有什麼區別,其實否則,估計是測試作的不夠,其實or的效率爲O(n),而in的效率爲O(log2n),當基數越大時,in的效率就能凸顯出來了。性能

有人作了這麼一組實驗(測試庫數據爲1000萬條記錄):A組分別用or與in查詢3條記錄,B組分別用or與in查詢120條記錄,C組分別用or與in查詢500條記錄,D組分別用or與in查詢1000條記錄.測試

第一種狀況,目標列爲主鍵的狀況,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查詢

結論:時間

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

相關文章
相關標籤/搜索