【问题标题】:Mysql: multiple column indexes, does the order of the multiple column index matter?Mysql:多列索引,多列索引的顺序有关系吗?
【发布时间】:2015-07-15 11:38:19
【问题描述】:

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

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

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

我执行一个查询:

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

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

  • B、C、D
  • D、B、C

或者多列索引的顺序不重要?

补充问题:

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

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

为什么(不)?

【问题讨论】:

  • 哇,我的 php 脚本过去需要 +/- 29 秒来执行,而在多列上使用 mysql-indexes,只需要 +/- 0.34 秒!!速度快 +/- 85 倍!

标签: mysql multiple-columns database-indexes


【解决方案1】:

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

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, B, C] 表示 D,但不是 C,因为 B 未在 WHERE 中使用:

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

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

MySQL 可以将多列索引用于测试索引中所有列的查询,或仅测试第一列、前两列、前三列等的查询。

【讨论】:

  • 如果我添加另一个索引,仅在 D 和 C 列上?那么我将有 2 个多列索引,一个在“C 和 D”上,一个在“B、C 和 D”上 或者这会减慢我的查询速度吗?
  • 这应该会加快您的最后一个查询并减慢您的插入速度。
  • 好的,所以我应该只在大桌子上使用它:-) 谢谢!
  • “您的最后一个查询不使用索引” - 这不太正确。 WHERE D='2' AND C='0'当然可以使用(D,B,C)上的索引。
  • 是的,在您的示例中将使用索引。也就是说,在某些情况下ORDER BY cannot 使用索引。
猜你喜欢
  • 2011-06-14
  • 2011-05-14
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
相关资源
最近更新 更多