MySQL中能够使用索引的典型场景

1.匹配全值,对索引中的所有列都有等值匹配的条件。
在这里插入图片描述
优化器用了idx_rental_date索引进行扫描,type字段的值为ref,表示是在非唯一索引扫描下,返回匹配某个单独值的记录行。

2.匹配值的范围查找。
在这里插入图片描述
类型type为range说明优化器选择范围查找,这里Extra为Using index comdition,表示优化器不需要回表查询数据,在存储引擎层完成了筛选再去表内取的数据。

3.匹配最左前缀,仅仅使用索引中最左边的列进行查找,比如在col1+col2+col3字段上的联合索引能被包含col1、col1+col2、col1+col2+col3的等值查询利用到,可是不能被col2、col2+col3的等值查询利用到。
在这里插入图片描述

4.仅仅对索引进行查询,当查询的列都在索引字段中时,查询效率更高。
在这里插入图片描述
Extra部分是Using index,即覆盖索引扫描,直接访问索引就能获取到所需数据,不用通过索引回表,减少不必要的数据访问能提升效率。

5.匹配列前缀,仅仅使用索引中的第一列,并且只包含索引第一列的开头一部分进行查找。
在这里插入图片描述
Extra部分是Using where表示需要通过索引回表查询数据。

(6)能够实现索引匹配部分精确而其它部分进行范围匹配。
在这里插入图片描述

(7)如果列名是索引,那么使用column_name is null 就会使用索引。
在这里插入图片描述
(8)MySQL5.6引入了Index Condition PushDown(ICP) 的特性,进一步优化了查询,某些情况下的条件过滤操作下放到存储引擎。
在这里插入图片描述
Extra部分为Using index condition就表示使用了ICP来优化查询,在检索时,把条件customer_id的过滤操作下推到存储引擎层来完成,能降低不必要的IO访问。
MySQL5.6之前,存储引擎会通过遍历索引定位基表中的行,然后返回给Server层,再去为这些数据行进行WHERE后的条件的过滤。MySQL5.6之后支持ICP后,如果WHERE条件可以使用索引,MySQL 会把这部分过滤操作放到存储引擎层,存储引擎通过索引过滤,把满足的行从表中读取出。我理解的ICP特性是说现在不需要回表查询数据了,在存储引擎层完成筛选再回表取数据。
5.5版本的复合索引:
在这里插入图片描述
5.6版本的ICP:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值