SQL的where執行順序
阿新 • • 發佈:2017-07-26
str blank link 順序 改變 其它 product 索引 lai
SQL的where執行順序
1 mysql 從左到右.
一個原則,排除越多的條件放到第一個
例子:抄的。
SELECT … WHERE p.languages_id = 1 AND m.languages_id = 1 AND c.languages_id = 1 AND t.languages_id = 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 m.languages_id = 1 AND c.languages_id = 1 AND t.languages_id = 1
這樣,第一次的條件是p.products_id IN (472,474),它返回的結果只有不到10條,接下來還要根據其它的條件來過濾,自然在速度上有了較大的提升。
2 ORCAL
從右到左
SQL的where執行順序