mysql索引

本文最后更新于:2022年8月11日 中午

回表

通过使用索引(非主键索引)查询到数据后,仍需通过主键id在主键索引上查询数据的过程,称为回表

覆盖索引

通过使用索引(非主键索引)查询到数据后,不需通过主键id在主键索引上查询数据,索引已经“覆盖了”我们的查询需求,我们称为覆盖索引
由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段

最左前缀原则

按照最左匹配原则进行判断是否使用索引
创建索引(name)

1
select * from user where name like '张%'; # 使用索引
1
select * from user where name like '%张'; # 未使用索引

索引下推

创建联合索引(name, age)

1
select * from user where name like '张%' and age=10 and isMale=1;

在 MySQL 5.6 之前,待找到第一个符合张前缀的用户后开始一个个回表。到主键索引上找出数据行,再对比字段值

而 MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数

参考文献


mysql索引
https://baymax55.github.io/2022/06/01/mysql/mysql索引/
作者
baymax55
发布于
2022年6月1日
许可协议