1、回表
回表是针对普通索引来说的。比如员工表主键为id,name为普通索引。
select * from emp where name = '张三'
索引的执行过程为首先利用索引name到b+tree索引的叶子节点找到主键索引id,主键索引id,在到b+tree上查找相应的数据。
简单来说就是name的索引在B+tree上保存的数据是主键id。而主键id对应的b+tree的叶子节点保存的才是行数据。
2、覆盖索引
select id from emp where name=1
查找的列正好是主键,就不需要去b+tree上查找,可直接返回
3、最左匹配
首先索引必须是组合索引。
索引(name,age)select * from emp where age =1 不会走索引
select * from emp where name='张三' 走索引
因此合理的索引应该建立两个一个是(name,age)一个是age
4、索引下推
select * from emp where name =1 and age= 18
是指在数据返回server的时候,数据引擎就讲name =1 和 age= 18的数据进行了过滤。在版本5.7之前的数据引擎先过滤掉name =1的数据返回,在server处过滤age=18的数据。相比较之前的返回,返回数据少,减少io