表t有两列
a varchr(50) not null
b varchr(50) not null
并且可能有以下搜索场景
搜索仅指定一个(例如
foo1,foo2,...
)(select a,b,status,count(*) where a in (xxx) group by a,b,状态
)仅搜索指定 b(例如
bar1,bar2,...
) (select a,b,status,count(*) where b in (xxx) group by a,b,状态
)a 和 b 都指定(
select a,b,status,count(*) where a in (xxx) and b in (xxx) group by a,b,status
)
自然应该为a和b创建索引,例如
alter table t add key idx_a_b (a,b);
alter table t add key idx_b (b);
但现在我想知道上面的索引与下面的索引是否有任何区别
alter table t add key idx_a (a);
alter table t add key idx_b (b);
我认为如果有任何差异,它可能可以忽略。我说得对吗?
最佳答案
最佳索引位于 (a, b, status)
和 (b, status)
。
这些涵盖了所有三个查询,这意味着查询中的所有列都在索引中。这些对于前两个查询也是最佳的。
第三个是有问题的,因为有两个 in
子句。没有索引(在 MySQL 中)可以处理过滤。
关于mysql - 关于比较两个索引 : (a, b) 和 (a),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44589463/