什么是覆盖索引?
在SQL执行流程中从非主键索引树搜索回到主键索引树搜索的过程称为:回表
在本次查询中因为查询结果只存在主键索引树中,我们必须回表才能查询到结果,那么如何优化这个过程呢?下面引入覆盖索引。
覆盖索引(covering index ,或称为索引覆盖)即从非主键索引中就能查到的记录,而不需要查询主键索引中的记录,避免了回表的产生,减少了树的搜索次数,显著提升性能。
使用
建立表student,id
为主键索引,name
为普通索引。
那么现在出现的业务需求中要求根据名称获取学生的年龄,并且该搜索场景非常频繁,那么先删除之前以字段name
建立的普通索引,以name
和age
两个字段建立联合索引,SQL命令与建立后的索引树结构如下:
1 | ALTER TABLE student DROP INDEX I_name; |
执行如下SQL:
1 | SELECT age FROM student WHERE name = '小李'; |
流程为:
- 在
name
,age
联合索引树上找到名称为小李的节点 - 此时节点索引里包含信息
age
直接返回 12
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HumgTop's Blog!
评论