表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,status
)
搜索仅指定b(例如bar1,bar2,...
)(select a,b,status,count(*) where b in (xxx) group by a,b,status
)
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);
我认为如果有任何不同,它可能会忽略。我是对的吗?
答案 0 :(得分:0)
最佳索引位于(a, b, status)
和(b, status)
。
这些涵盖了所有三个查询,这意味着查询中的所有列都在索引中。这些也是前两个查询的最佳选择。
第三个是有问题的,因为有两个in
条款。没有索引(在MySQL中)处理过滤。