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

2021-10-09 07:15:59 字數 781 閱讀 5996

結論如下:

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

針對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語句做出最優的優化順序,所以還是要我們自己預判斷出哪種過濾是最優,畢竟自己才最懂自己的資料

sql語句where後條件執行順序與優化

針對mysql,其條件執行順序是 從左往右,自上而下 針對orcale,其條件執行順序是從右往左,自下而上。where執行順序是從左往右執行的,在資料量小的時候不用考慮,但資料量多的時候要考慮條件的先後順序,此時應遵守乙個原則 排除越多的條件放在第乙個。在用mysql查詢資料庫的時候,連線了很多個過...

sql語句中的where條件執行順序

語句1 select from work order list where head corp id 1 and work order state in 1,2 and receiving id is null or receiving id 27 語句2 select from work orde...

SQL中條件放在on後與where後的區別

sql中on條件與where條件的區別 資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。在使用left jion時,on和where條件的區別如下 1 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。2 wh...