两种索引配置与查询场景下,索引是否均会被使用?
你的判断是正确的,具体分析如下:
场景1:联合索引与单条件查询
- 索引定义:
create index on post (owner_id, likes_count) - 查询语句:
select * from post where owner_id = ? - 分析:联合索引遵循最左前缀匹配原则,
owner_id是索引的第一列,查询条件完全匹配该列,数据库会使用这个联合索引的前缀部分来加速查询,不会走全表扫描。
场景2:两个单列索引与多条件查询
- 索引定义:
create index on post (owner_id)+create index on post (likes_count) - 查询语句:
select * from post where owner_id = ? AND likes_count = ? - 分析:数据库优化器会根据数据分布选择最优执行策略:
- 优先选择过滤效果更好的单列索引(比如
owner_id区分度更高时,先用它过滤数据,再在结果集中匹配likes_count); - 也可能执行索引合并,同时使用两个索引并取结果集的交集。
无论哪种方式,至少会用到其中一个索引,避免全表扫描。
- 优先选择过滤效果更好的单列索引(比如
内容的提问来源于stack exchange,提问作者J.J. Beam
相关产品推荐
相关产品推荐

