1. 程式人生 > >mysql where執行順序

mysql where執行順序

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中的欄位順序無所謂,可以隨便放在哪,應該儘可能地第一次就過濾掉大部分無用的資料,只返回最小範圍的資料。