2012-10-31 68 views
2

可能重複:
Does the order of fields in a WHERE clause affect performance in MySQL?秩序的WHERE查詢約束

是否在該元素的順序WHERE子句更改查詢的速度?

我有以下幾點:

SELECT * FROM table1 WHERE a<b 

。這將返回500條記錄。

SELECT * FROM table1 WHERE c<d 

。這返回了130000000條記錄。

現在,如果你有以下兩種選擇:

SELECT * FROM table1 WHERE a<b AND c<d 

SELECT * FROM table1 WHERE c<d AND a<b 

其中這兩個查詢會更快?訂單是否重要?

+0

謂詞的順序沒有區別。 – Kermit

+0

但是,mysql不會一個接一個地執行這些約束。在這種情況下,我猜想第一個會更快,因爲它爲第二個約束創建了更少的條目? – David19801

+0

試試看看? –

回答

0

不,沒有區別。就像在MATH中一樣,A + B = B + C。這只是意味着交換兩者並沒有什麼區別。

+0

我相信他談論的是查詢的速度,而不是結果集。 – Darrrrrren

+0

@Darrrrrren我沒有說結果集。我只是說明交換兩者沒有任何區別。 –

3

它會影響性能的唯一時間就是索引。

如果你有一個(a, c)索引,一個謂詞WHERE c < d AND a < b會運行得更慢,因爲索引從左到右。

如果您沒有索引,則順序無關緊要。

+0

絕對如此。查詢的速度很好取決於表的索引和表運行的引擎。 – deed02392

+0

在編輯之後刪除downvote,但如果這是正確的,將會感到驚訝,並且MySQL無法重新排列它認爲合適的謂詞。 –

+0

@MartinSmith謝謝。我更熟悉SQL Server的性能,而且我知道,如果順序不符合索引的「從左到右」,索引將不會被使用。 – Kermit