1、回表
回表是针对普通索引的。例如,员工表的主键是id,name普通索引。
select * from emp where name = ‘张三’
索引的执行过程是首先使用索引name到b tree找到索引叶节点的主键索引id,主键索引id,在到b tree找到相应的数据。
简单来说就是name的索引在B tree保存在上面的数据是主键id。而主键id对应的b tree行数据保存在叶节点中。
2、覆盖索引(Covering Index)
select id from emp where name=1
查找的列正好是主键,就不需要去b tree上搜,可直接返回
或者: 组合索引 (name,age) select age from table where name = ‘xx’
在执行计划中Extra: Using index
3、最左匹配
首先索引必须是组合索引。
索引(name,age)select * from emp where age =1 不会走索引
select * from emp where name=‘张三’ 走索引
因此,应该建立两个合理的索引(name,age)一个是age
组合索引(a,b,c) where从左到右包含组合索引的顺序:abc等同于bca,ab等同于ba,a
4、索引下推
索引下推实际上是指将上层(服务层)负责的部分事情交给下层(引擎层)处理
select * from emp where name =1 and age= 18
或者: 组合索引:(name,age),(王1、10)、(王2、18)、(王3、20)
select * from table where name like ‘王%’ and age =18
版本5.7之前的数据库引擎过滤掉了name =1数据回表查询,然后在server处过滤age=18的数据。 版本5.之后,数据库引擎将是7name =1 和 age= 过滤了18个数据,然后回表查询数据server。
原文链接:https://blog.csdn.net/shw12357/article/details/108639636