假設我有一個MySQL查詢有兩個條件:秩序MySQL的條件執行
SELECT * FROM `table` WHERE `field_1` = 1 AND `field_2` LIKE '%term%';
第一個條件顯然會比第二便宜很多,所以我想,以確保它首先運行,限制將與LIKE子句進行比較的行池。 MySQL查詢條件是否按照它們列出的順序運行,如果沒有,是否有指定順序的方法?
假設我有一個MySQL查詢有兩個條件:秩序MySQL的條件執行
SELECT * FROM `table` WHERE `field_1` = 1 AND `field_2` LIKE '%term%';
第一個條件顯然會比第二便宜很多,所以我想,以確保它首先運行,限制將與LIKE子句進行比較的行池。 MySQL查詢條件是否按照它們列出的順序運行,如果沒有,是否有指定順序的方法?
MySQL有一個內部查詢優化器,可以在大多數情況下處理這些事情。所以,通常你不需要擔心。
但是,當然,查詢優化器不是萬無一失的。所以...
對不起,您可以通過EXPLAIN
來熟悉EXPLAIN
,如果您懷疑某個查詢的運行效率可能會低於應該的值。
如果您有關於指數的MySQL的使用疑慮,你可以建議應該用什麼指標。
優化器將評估在它認爲合適的順序WHERE條件。
SQL是declarative:你告訴你想要什麼的優化器,不怎麼做到這一點。
在procedural/imperative語言(.net,Java,php等)中,您說如何並且會選擇首先評估哪種條件。
注:「從左至右」並不適用於像(a+b)*c
某些詞語如你所期望
確實,你也不能使用MySQL條件執行順序作爲'或條件',在過程語言中,你可以使用'if(a == 1 || b == 3)..',一旦'a == 1','b == 3'永遠不會被執行。 –
不診斷具體的查詢,只是醞釀的可能性。感謝EXPLAIN提示,我將不得不閱讀它。 – wyatt