0

我有一个查询SELECT.. WHERE user_id='' && date>:expire && used=0;

当我尝试创建索引时。我应该在一个查询中一起创建吗

CREATE INDEX new_index ON table (user_id, date, used)

还是应该将它们分开并为每列创建索引?

4

2 回答 2

1

这实际上取决于您如何计划查询这些列。您最安全的选择是为每列创建索引,尽管这可能不会产生最佳性能。

多列索引适用于以下情况:

  • 您需要在列值的组合中强制执行唯一约束
  • 您知道您将始终以特定组合将列用于连接、where 子句、order by、group by 等

例如,对于您提出的组合索引(user_id、date、used),您只能在以下条件下使用该索引:

  • 您仅在 user_id 上执行 join、where 等操作
  • 您正在对 user_id 和 date 进行 join、where 等操作
  • 您正在对所有三列进行连接、位置等操作

您将无法在这些情况下使用索引

  • 您在日期或单独使用时正在加入、在哪里等
  • 您在日期和使用日期进行加入、位置等

为了进一步阅读,这里是关于多列索引的 MySQL 文档:

http://dev.mysql.com/doc/refman/5.5/en/multiple-column-indexes.html

于 2013-09-18T16:31:23.000 回答
0

根据您的查询,您应该使用多列索引。但是,正确的索引是:

CREATE INDEX new_index ON table (user_id, used, date)

请注意,这date是索引中的最后一个,因为您有一个不等式。

MySQL 恰好在这里对多列索引及其使用方式进行了很好的讨论。

于 2013-09-18T16:50:45.370 回答