MySQL 索引合并总结与问题

2023-08-30 17:01:16 +08:00
 54qyc

总结了下,其中有一些并没查到文档描述,所以有猜测成分,如有错误请指出。

索引合并主要分 3 类

索引交集合并

限制条件: where 必须是 or 连接的多个条件,并且每个条件是等值匹配匹配的二级索引或者范围匹配的主键索引。

动机:当优化器发现使用多个索引取交集减少的回表成本超过使用多个索引读取新增的成本时,会使用索引交集合并优化。(之所以限制中二级索引是等值匹配,是因为范围匹配极大概率减少的成本不如新增的成本?直接一刀切?作为对比,索引并集合并则支持 range 匹配)

索引并集合并(支持 range 匹配二级索引的叫做索引并集排序合并,感觉没必要区分这 2 类)

限制条件: where 必须是 and 连接的多个条件,并且每个条件是范围匹配的二级索引或者主键索引或者可以用索引交集合并优化的条件。

动机: 如果不使用多个索引取并集,则只能去全表扫描。但是使用多个索引取并会新增一个排序成本,就是多个索引取出来的记录可能存在重复,需要按照 ID 排序去重(这里文档只说了排序,没有说原因,原因个人猜测是为了去重?对吗?)。所以优化器还会考虑使用多个索引查询出来的记录多不多,如果太多排序的代价超过全表扫描代价,就仍然会选择全表扫描?

1006 次点击
所在节点    MySQL
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/969536

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX