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

标签 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,状态)

  • 仅搜索指定 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/

相关文章:

php - 没有数据库的 Codeigniter 网站在实时服务器上生成数据库错误

sql - 在关系数据库中存储 XML 数据的常见问题是什么?

performance - 提高 SQL Server 2005 查询性能

sql - 使用SELECT INTO时是否可以在临时表上创建索引?

mysql - 搜索两个不同的数据库(mysql 和 postgres)

mysql - Node.js 通过 ssh 连接

r - 选择 R 中数据框的最后 n 列

php - 索引唯一键似乎不起作用

java - 我可以强制 liquibase 3.5.1 忽略旧版变更集校验和差异吗?

javascript - 使用 jEditable、jQuery 和 DataTables 更新表中的单元格