我讀過的MySQL索引到左側,所以如果我創建跨兩列field1
索引,field2
我可以這樣做:MySQL索引在左邊?
SELECT .. FROM .. WHERE `field1` = 'x' AND `field2` = 'y';
和
SELECT .. FROM .. WHERE `field1` = 'x';
無一不會被罰款?我在問,因爲有時候它會被兩列查詢,有時候會被第一列查詢。或者兩種情況下有兩個不同的指數會更好嗎?
我讀過的MySQL索引到左側,所以如果我創建跨兩列field1
索引,field2
我可以這樣做:MySQL索引在左邊?
SELECT .. FROM .. WHERE `field1` = 'x' AND `field2` = 'y';
和
SELECT .. FROM .. WHERE `field1` = 'x';
無一不會被罰款?我在問,因爲有時候它會被兩列查詢,有時候會被第一列查詢。或者兩種情況下有兩個不同的指數會更好嗎?
是的,雙列索引可以使兩個查詢都受益。無需創建兩個索引。
實際上,工具pt-duplicate-key-checker會將單列索引報告爲冗餘。
Simontemplar,你是對的。兩個查詢都是對的。只要你沒有運行:
SELECT .. FROM .. WHERE `field2` = 'y' AND `field1` = 'x';
或
SELECT .. FROM .. WHERE `field2` = 'y';
保持一個綜合指數更不應該是一個問題。
MySQL知道如何使用上面的第一個示例中的索引。優化器知道'AND'是可交換的。 :-) – 2013-04-30 04:43:21
tks補充! – medina 2013-04-30 04:47:29
鏈接爲你http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html – Rahul 2013-04-30 04:34:17