知识概括
a. all 全表扫描
b. index 按照索引顺序的全表扫描
c. range 有范围的索引扫描 ,between,and以及'>','<'外,in和or均是索引范围扫描
d. ref 使用了非主键或者非唯一索引的普通索引(即索引可以重复情况下的)
e. ref_eq 使用了唯一索引的查询
f. const 使用了主键索引的查询
1.建表
create table indexTest(
id int(3) not null auto_increment,
a int(3) not null default 0,
b int(3) not null default 0,
c int(3) not null default 0,
primary key(id),
key in_ab (a,b)
)engine=INNODB default charset=utf8;
2.插入数据
insert into indexTest(id,a,b,c) values (3,4,2,4);
insert into indexTest(id,a,b,c) values (2,7,6,5);
insert into indexTest(id,a,b,c) values (4,4,1,6);
insert into indexTest(id,a,b,c) values (1,4,4,9);
insert into indexTest(id,a,b,c) values (5,2,7,2);
insert into indexTest(id,a,b,c) values (7,4,0,0);
3.SELECT * from indexTest;
查询到的结果集,自动按照id升序排序;实质为数据在插入的时候,会自动按照主键索引进行排序。
4.all的全表查询
在第二条语句中,如果使用索引a的结构,获取到数据,则由于部分需要的数据在索引a的结构不存在,此时需要逐个从主键索引结构中获取,此时性能更加低下。
5. index 按照索引顺序的全表扫描
按照索引顺序的全表扫描
6. range 有范围的索引扫描
,between,and以及'>','<'外,in和or均是索引范围扫描
7.ref 普通索引查找
使用了非主键或者非唯一索引的普通索引(即索引可以重复情况下的)
8.const 使用了主键索引的查询