专栏首页「3306 Pai」社区新特性解读 | MySQL 8.0 索引特性2-索引跳跃扫描

新特性解读 | MySQL 8.0 索引特性2-索引跳跃扫描

MySQL 8.0 实现了Index skip scan,翻译过来就是索引跳跃扫描。熟悉ORACLE的朋友是不是发现越来越像ORACLE了?再者,熟悉MySQL 5.7 的朋友是不是觉得这个很类似当时优化器的选项MRR?好了,先具体说下什么 ISS,我后面全部用 ISS 简称。

*考虑以下的场景:

表t1有一个联合索引idx_u1(rank1,rank2),但是查询的时候却没有rank1这列,只有rank2。比如,select * from t1 where rank2 = 30。

那以前遇到这样的情况,如果没有针对rank2这列单独建立普通索引,这条SQL怎么着都是走的FULL TABLE SCAN。

ISS 就是在这样的场景下产生的。ISS 可以在查询过滤组合索引不包括最左列的情况下,走索引扫描,而不必要单独建立额外的索引。因为毕竟额外的索引对写开销很大,能省则省。

还是拿刚才的例子来讲,假设:

表t1的两个字段rank1,rank2。有这样的记录,

我们给出的SQL是,

select * from t1 where rank2 >400,

那MySQL通过ISS把这条SQL变为,

select * from t1 where rank1=1 and rank2 > 400union allselect * from t1 where rank1 = 5 and rank2 > 400;

可以看出来,MySQL其实内部自己把左边的列做了一次DISTINCT,完了加进去。

我们拿实际的例子来看下。假设:

还是刚才描述那张表,rank1字段值的distinct值比较少。查询计划的对比,

关闭 ISS,

很显然,ISS 扫描的行数要比之前的少很多。

ISS其实恰好适合在这种左边字段的唯一值较少的情况下,效率来的高。比如性别,状态等等。

那假设:rank1字段的distinct值比较多呢?

我们重新造了点数据,这次,rank1的唯一值个数有快上万个。

我们来再次看一遍这样SQL的执行计划,

这次我们发现,无论如何MySQL也不会选择 ISS,而选了FULL INDEX SCAN。

那这样的场景就必须给rank2加一个单独索引了。

那来总结下 ISS 就是一句话:ISS 其实就是MySQL 8.0推出的适合联合索引左边列唯一值较少的情况的一种优化策略。

本文分享自微信公众号 - 3306pai(pai3306),作者:杨涛涛

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 不用MariaDB/Percona也能查看DDL的进度

    使用MariaDB/Percona版本的一个便利之处就是可以及时查看DDL的进度,进而预估DDL耗时。 其实,在官方版本里也是可以查看DDL进度的,认真看手册的...

    [3306 Pai ] 社区
  • 转载|MySQL Online DDL,还是要谨慎

    其他的DDL操作相对比较少,所以本文就不讨论了。 此外,本文也不讨论非InnoDB引擎以及非普通索引(如全文索引、空间索引)的场景。

    [3306 Pai ] 社区
  • 新特性解读 | MySQL 8.0 直方图

    MySQL 8.0 推出了histogram,也叫柱状图或者直方图。先来解释下什么叫直方图。

    [3306 Pai ] 社区
  • 京东商城大规模爬虫的开发

    專 欄 ❈ 蜗牛仔,Python中文社区专栏作者,怒学Python爬虫,争当爬虫工程师, github地址: https://github.com/xiaob...

    Python中文社区
  • SQL Server 2014聚集列存储索引

     转发请注明引用和原文博客(https://cloud.tencent.com/developer/user/1217611/activities) 简介   ...

    用户1217611
  • 实现一个hoverDelay延迟hover

    经常在页面开发中,需要使用hover事件来触发相应的网络请求或页面DOM元素显示切换,需要考虑的问题就有了:

    Tiffany_c4df
  • 一次Impala upsert kudu执行缓慢问题排查总结

    BI同学会用Impala在Kudu表上跑一些ETL任务,最近,BI同学反馈一个Kudu表的ETL任务突然变慢,执行时间从原来的不到1分钟到现在的7分钟。

    Fayson
  • 移动正在吞噬这个世界

    大数据文摘
  • 火车票买不到?看我用python监控票源

    最近高铁票比较难买,还有什么候补。要不停的刷,才有时候可以捡漏。有时候明明候补了,到快开车告诉你余票不足,候补失败。

    赵云龙龙
  • Processing雁群实验(续)

    (1)旋转复杂不规则图形; (2)运用二维数组定义图形; (3)鼠标左右移动控制物体沿 Y 轴旋转; (4)点击鼠标线条变色。

    一石匠人

扫码关注云+社区

领取腾讯云代金券