MySQL之索引:索引欄位使用順序對複合索引有效性的影響
阿新 • • 發佈:2019-01-27
整理下複合索引中,使用順序對索引有效性的影響
首先這裡建立一張資料表,並建立符合索引( index_A,index_B,index_C)
CREATE TABLE `test_index_sequence` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `index_A` varchar(255) DEFAULT NULL, `index_B` varchar(255) DEFAULT NULL, `index_C` varchar(255) DEFAULT NULL, `field_D` varchar(255) DEFAULT NULL, PRIMARY KEY (`Id`), KEY `complex_index` (`index_A`,`index_B`,`index_C`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
並插入若干數值:
資料插入完成後,下面開始逐步驗證索引的有效性。
1、單獨使用欄位index_A:
EXPLAIN
SELECT *
FROM test_index_sequence
WHERE index_A='a'
通過EXPLAIN分析可以看到訪問型別為ref,掃描行數為3行,索引有效;
2、單獨使用欄位index_B:
EXPLAIN
SELECT *
FROM test_index_sequence
WHERE index_B='b'
通過EXPLAIN分析可以看到訪問型別為ALL即全表掃描,掃描行數為9行即全部行數,索引失效;
3、單獨使用欄位index_C :
EXPLAIN
SELECT *
FROM
test_index_sequence
WHERE index_C='c'
檢視分析結果同單獨使用使用欄位 index_B,索引失效;
4、聯合使用欄位index_A,index_B:EXPLAIN
SELECT *
FROM test_index_sequence
WHERE index_A='a' AND index_B='b'
檢視分析結果,索引有效;
5、聯合使用欄位index_A,index_C:
EXPLAIN SELECT * FROM test_index_sequence WHERE index_A='a' AND index_C='c'
檢視分析結果,索引有效;
6、聯合使用欄位index_B,index_C:
EXPLAIN
SELECT *
FROM test_index_sequence
WHERE index_B='b' AND index_C='c'
檢視分析結果,索引失效;
7、聯合使用欄位index_A,index_B,index_C:
EXPLAIN
SELECT *
FROM test_index_sequence
WHERE index_A='a' AND index_B='b' AND index_C='c'
檢視分析結果,索引有效;
綜述:MySQL的複合索引遵循了最左字首原則,當建立索引(index_A,index_B,index_C)時:
使用索引有效的欄位為:'index_A’,'index_A,index_C’,'index_A,index_B’,'index_A,index_B,index_C’;
使用索引失效的欄位為:'index_B’,'index_C’,'index_C,index_B’;