索引 2

索引

1. 回表

回到主键索引树搜索的过程,称为回表。

2. 什么时候会回表

要查询的数据,在非主键索引中不包含时,需要回到主键索引,查询数据。

3. 什么是覆盖索引

要查询的数据,索引已经覆盖了该数据,不需要回到主键索引。
例如,select ID from T where k between 3 and 5. 表T在主键ID以及k上有索引。
上述的查询在k索引中能获取到主键ID,不需要回表。

4. 什么时候需要使用联合索引

如果有一个高频的需求,需要某两列的信息,比如 根据身份证号查询姓名,此时使用(身份证号,姓名)构建联合索引,能避免一次回表,使用联合索引就有价值。

5. 什么是最左前缀原则

在这里插入图片描述

索引项是按照索引定义定义里面出现的字段的顺序排列的。
满足索引的最左N个字段或者M个字符就可以使用索引加速搜索。
上图中使用(姓名,年龄)构建联合索引,当使用 姓名like '%张’的时候就可以使用索引,但是用年龄=20 的时候就不能使用索引。

6. 建立联合索引的时候如何安排位置

根据最左前缀原则,(a,b)联合索引已经覆盖了 单独的a索引,所以就不需要单独建立a索引。因此联合索引位置的调整能够减少维护索引的数量,那么该调整就是有效的。

7. 索引下推

在MySQL5.6 引入了索引下推。索引下推是在索引遍历的过程中,对索引中包含的字段进行判断,不符合判断的字段,直接过滤,减少回表次数。
举个例子:
表t中的数据如下:

IDnameage
1张三10
2张四20

在表上有主键索引

索引列数据项
1name:张三,age:10
2name:张四,age:20

还有一个name,age的联合索引

nameageID
张三101
张四202

当执行如下的查询语句

select * from t where name like '%张' and age = 10

没有索引下推的时候,需要先去(name,age)的联合索引查询 name like '%张’的数据的ID,然后在回表到主键索引中,根据ID查询数据,查到数据之后再根据age=10 进行过滤。
但是有了索引下推之后,在索引遍历的过程中,会对索引包含的字段进行过滤。首先先去(name,age)联合索引中查询 name like ‘%张’,与此同时,会根据age=10 进行过滤。减少了回表的次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值