2011-11-30 54 views
8

假設我有一個MySQL查詢有兩個條件:秩序MySQL的條件執行

SELECT * FROM `table` WHERE `field_1` = 1 AND `field_2` LIKE '%term%'; 

第一個條件顯然會比第二便宜很多,所以我想,以確保它首先運行,限制將與LIKE子句進行比較的行池。 MySQL查詢條件是否按照它們列出的順序運行,如果沒有,是否有指定順序的方法?

回答

6

MySQL有一個內部查詢優化器,可以在大多數情況下處理這些事情。所以,通常你不需要擔心。

但是,當然,查詢優化器不是萬無一失的。所以...

對不起,您可以通過EXPLAIN來熟悉EXPLAIN,如果您懷疑某個查詢的運行效率可能會低於應該的值。

http://dev.mysql.com/doc/refman/5.0/en/explain.html

+0

不診斷具體的查詢,只是醞釀的可能性。感謝EXPLAIN提示,我將不得不閱讀它。 – wyatt

6

優化器將評估在它認爲合適的順序WHERE條件。

SQL是declarative:你告訴你想要什麼優化器,不怎麼做到這一點。

procedural/imperative語言(.net,Java,php等)中,您說如何並且會選擇首先評估哪種條件。

注:「從左至右」並不適用於像(a+b)*c某些詞語如你所期望

+1

確實,你也不能使用MySQL條件執行順序作爲'或條件',在過程語言中,你可以使用'if(a == 1 || b == 3)..',一旦'a == 1','b == 3'永遠不會被執行。 –