1.前言
我们写完查询语句后,在Mysql server层有一个优化器的模块,它会在语句被解析之后,对语句进行优化,优化的结果就是生成一个所谓的执行计划,这个执行计划表明了应该使用了那些索引进行查询,表之间的连接顺序是啥样的,等等。最后会按照执行计划中的步骤调用存储引擎提供的接口来真正地执行查询,并将查询结果返回给客户端。
2.访问方法
这里有一张表
create table singe_table( in int not null auto_increment, key1 varchar(100), key2 int, key3 varchar(100), key_part1 varchar(100); key_part2 varchar(100); key_part3 varchar(100); primary key (id); key idex_key1(key1); unique key_uk_key2(key2); key idx_key3(key3); key idx_key_part(key_part1,key_part2,key_part3) )engine=innodb charsert=utf8;
1.const : 通过主键或者唯一二级索引与常数的等值比较来定位来定位一条记录的,这种方法就叫const方法
select* from single_table wehre id=1438;
2.ref:通过普通的二级索引与常数进行等值比较定定位一条记录的,这种方法就叫ref方法
select * from single_table where key1='abc';
3.ref_or_null:当我们使用某个二级索引列的值等于某个常数的记录,而且还想把该列中的值Null的记录也找出来。
select * from single_table where key1='abc' or key1 is null
4.range:使用索引查询时,对应的扫描区间为若干个单点扫描区间或者范围扫描区间的访问方法称为range
select * from singel_table wehre key2 in(1438,6328) or (key2>=38 and key2<=79)
5.index:扫描全部的二级索引记录的访问方法称为index访问方法
select key_part1,key_part2,key_part3 from single_table where key_part2='abc'
6.all:最直接的查询方式就是全表扫描,对于innodb表来说就是直接扫描全部的聚簇索引记录。
select key_part1,key_part2,key_part3 from single_table where key_part2='abc'