天天看點

sql語句 where 後條件執行先後順序

結論如下:

1. 針對mysql,其條件執行順序是 從左往右,自上而下

2. 針對orcale,其條件執行順序是從右往左,自下而上

mysql

where執行順序是從左往右執行的,在資料量小的時候不用考慮,但資料量多的時候要考慮條件的先後順序,此時應遵守一個原則:排除越多的條件放在第一個

在用MySQL查詢資料庫的時候,連接配接了很多個過濾條件,發現非常慢。例如:SELECT … WHERE p.languages_id=1 AND t.type=1 AND p.products_id IN (472,474),這樣查詢需要20多秒,雖然在各個字段上都建立了索引。用分析Explain SQL一分析,發現在第一次分析過程中就傳回了幾萬條資料:WHERE p.languages_id=1 ,然後再依次根據條件縮小範圍。

然後稍微改變一下WHERE字段的位置之後,速度就有了明顯地提高:WHERE p.products_id IN (472,474) AND p.languages_id=1 AND t.type=1,這樣第一次的過濾條件是p.products_id IN (472,474),它傳回的結果隻有不到10條,接下來還要根據其它的條件來過濾,自然在速度上有了較大的提升。經過實踐發現,不要以為WHERE中的字段順序無所謂,可以随便放在哪,應該盡可能地第一次就過濾掉大部分無用的資料,隻傳回最小範圍的資料

最新發現:

大多時候mysql會自動根據sql語句做出優化,使用最優的sql語句進行查詢

補充:

有時候mysql無法根據sql語句做出最優的優化順序,是以還是要我們自己預判斷出哪種過濾是最優,畢竟自己才最懂自己的資料

繼續閱讀