深入浅出索引(下)

覆盖索引

如果执行语句如:select ID from T where k between 3 and 5,这是只需要查ID的值,而ID的值已经在k索引树上了,因此可以直接提供查询结果,不需要回表,这种情况我们称为覆盖索引

由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

最左前缀原则

可以看到,索引是按照索引定义里面出现的字段排序的。

只要满足最左前缀,就可以利用索引来加速检索。这个最左前缀可以是联合索引的最左 N 个字段,也可以是字符串索引的最左 M 个字符。

在建立联合索引的时候,如何安排索引内的字段顺序?

第一原则是,如果通过调整顺序,可以少维护一个索引,那么这个顺序往往就是需要优先考虑采用的。

索引下推

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

例如以下查询语句:

1
mysql> select * from tuser where name like '张 %' and age=10 and ismale=1;
无索引下推

有索引下推

可以明显的看出,有索引下推的情况下减少了回表的次数。

Licensed under CC BY-NC-SA 4.0
陕ICP备16008414号
使用 Hugo 构建
主题 StackJimmy 设计