关于比较两个索引:(a,b)和(a)

时间:2017-06-16 12:38:03

标签: mysql indexing

表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);

我认为如果有任何不同,它可能会忽略。我是对的吗?

1 个答案:

答案 0 :(得分:0)

最佳索引位于(a, b, status)(b, status)

这些涵盖了所有三个查询,这意味着查询中的所有列都在索引中。这些也是前两个查询的最佳选择。

第三个是有问题的,因为有两个in条款。没有索引(在MySQL中)处理过滤。