Mysql:多列索引,多列索引的顺序重要吗?

标签 mysql multiple-columns database-indexes

我正在尝试理解多列索引。

问题是: 多列索引的顺序重要吗?

我有一个包含 A、B、C 和 D 列的表格。

我执行一个查询:

SELECT A FROM table WHERE D='2' AND B='1' AND C='0' ;

如果我只创建一个多列索引,速度会有差异吗:

  • 乙、丙、丁
  • D、B、C

或者多列索引的顺序无关紧要?

补充问题:

如果我执行以下查询,它是否仍然受益于多列索引?

SELECT A, B FROM tablename WHERE D='2' AND C='0';

为什么(不)?

最佳答案

多列索引的顺序无关紧要。换句话说,以下两个查询是相同的:

SELECT A FROM table WHERE D='2' AND B='1' AND C='0';
SELECT A FROM table WHERE B='1' AND D='2' AND C='0';

您的最后一个查询对 D 使用索引 [D, B, C] 而不是 C 因为 B 没有在 哪里:

SELECT A, B FROM tablename WHERE D='2' AND C='0';

这是因为未使用索引的第一部分(B 列)。您可以在 MySQL manual 中找到更多详细信息:

MySQL can use multiple-column indexes for queries that test all the columns in the index, or queries that test just the first column, the first two columns, the first three columns, and so on.

关于Mysql:多列索引,多列索引的顺序重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31429358/

相关文章:

postgresql - 无法在带日期的 jsonb 字段上创建索引

php - 从我的网站 1 访问我的其他数据库到我的网站 2

php - 如何创建具有特定编号的 MySQL 表。行数?

html - 展开一个 div 以填充剩余的宽度

sql - 如果关系没有索引,SQL 查询是否有效?

mysql - 多列索引还需要单列索引吗?

php - SQL插入行并将插入的自动增量ID复制到另一列

mysql - mysql错误1442的真正原因是什么?

python - 如何通过函数向数据框添加多列

css - 两个 CSS 列。一个动态,第二个固定一起工作