只要列中包含列,優化器就會處理訂單沒有區別。
WHERE by_id = '324' AND origin = 'Australia' AND genre = 'rock'
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
-------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | artists | const | PRIMARY | PRIMARY | 80 | const,const,const | 1 | Using index |
WHERE by_id = '324' AND genre = 'rock' AND origin = 'Australia'
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
-------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | artists | const | PRIMARY | PRIMARY | 80 | const,const,const | 1 | Using index |
如果發生了離開了by_id
,將未使用的指標(指標做工左至右)
WHERE genre = 'rock'
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
---------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | artists | index | (null) | PRIMARY | 80 | (null) | 1 | Using where; Using index |
WHERE origin='Australia' AND genre = 'rock'
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
---------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | artists | index | (null) | PRIMARY | 80 | (null) | 1 | Using where; Using index |
這是不正確的。在where謂詞中使用正確的列是非常重要的。但列輸入的順序並不重要。 – javadba 2013-03-09 18:15:43
@javadba:你是對的。 Sharad正在討論索引定義中的順序,而OP正在討論WHERE子句中的順序。後者並不重要,但前者確實如此。所以雖然沙拉德是正確的,但他們的答案並不是真正的答案。 – siride 2013-03-09 18:20:55
@javadba:查詢中它的真實順序問題,你應該首先檢查索引的定義。 – Sharad 2013-03-09 18:59:09