本文介绍: 如果是联合索引的话,在构造B+树的时候,会先按照左边的 key进行排序,左边的 key 相同时再依次按照右边的 key 排序。在通过索引查询的时候,也需要遵守最左前缀匹配的原则,也就是需要从联合索引的最左边开始进行匹配,这时候就要求查询语句的where条件中,包含最左边的索引的值。
范围查询优化:索引跳跃扫描
如果是联合索引的话,在构造B+树的时候,会先按照左边的 key进行排序,左边的 key 相同时再依次按照右边的 key 排序。在通过索引查询的时候,也需要遵守最左前缀匹配的原则,也就是需要从联合索引的最左边开始进行匹配,这时候就要求查询语句的where条件中,包含最左边的索引的值。
索引跳跃扫描
MySQL一定是遵循最左前缀匹配的,这句话在以前是正确的,但是在MySQL 8.0出现了索引跳跃扫描。
考虑以下场景:
为了执行这个查询,需要进行一次全表扫面才能查出f2 > 40
的结果集。
范围扫描比完整索引扫描更有效,但在这种情况下不能使用,因为没有f1的参与。然而,从 MySQL 8.0.13 开始使用一种称为 索引跳跃扫描(Index Skip Scan) 的方法,优化器可以执行多个范围扫描,对于每一个 f1 字段的值,进行 f2 范围扫描。
最终执行的SQL语句是像下面这样的:
索引跳跃扫描的使用条件
索引跳跃扫描的开关
参考链接
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。