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


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

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

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

2.SQL server
由於解析是從BOTTOM到TOP進行的,因此應該先編寫表聯接,然后再執行WHERE子句的任何條件,並在聯接完成后將篩選出最大記錄的條件放在最后。
通過應用適當的過濾器(如果有)來減少參與聯接的表中的行數。這將幫助優化器有效地使用緩存並幫助提高性能
將具有高容量的表放在SQL查詢的右側。

https://blog.csdn.net/yzf279533105/article/details/89473167


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM