首先這裡建立一張資料表,並建立符合索引( 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分索引有效;
2、單獨使用欄位index_b:
explain
select *
from test_index_sequence
where index_b='b'
通過索引失效;
3、單獨使用欄位index_c:
explain
select *
from
test_index_sequence
where index_c='c'
檢視分析結果,索引失效;
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_b』,'index_a,index_b,index_c』;
使用索引失效的字段為:'index_b』,'index_c』,'index_c,index_b』;
mysql 復合索引
聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...
mysql復合索引原理 MySQL 聯合索引詳解
mysql 聯合索引詳解 聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索...
mysql復合索引 普通索引總結
mysql復合索引 普通索引總結 對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。...