单复合索引还是两个独立索引?多表关联查询索引选型咨询
优先创建
(b1, b2, b3)复合索引,而非两个独立索引 核心原因:
- 适配最可能的执行路径:优化器大概率会选择A作为驱动表(A已有
(a1,a2)索引,能快速过滤匹配行),此时(b1,b2)作为复合索引的前缀,可直接匹配连接条件快速定位B表的行。同时索引中自带b3字段,无需回表读取b3的值就能和C表的c1做连接匹配,减少一次磁盘IO操作。 - 兼顾反向执行路径:如果优化器选择C作为驱动表,虽然
b3在复合索引的第三列,无法像单独的b3索引那样直接高效匹配,但复合索引依然能完成匹配(只是效率略低)——而这种场景出现的概率通常低于A作为驱动表的情况。 - 更低的维护成本:单条复合索引比两个独立索引占用更少存储空间,且B表执行增删改操作时,仅需维护这一条索引,降低了写操作的开销。
如果你的<some conditions>中包含B表的其他过滤列,可以考虑将这些列加入复合索引的后缀(作为覆盖索引),进一步减少回表操作。但基于当前给出的查询语句,(b1, b2, b3)是最优选择。
内容的提问来源于stack exchange,提问作者yxw158
相关产品推荐
相关产品推荐

