设置Mysql索引组列或分开

时间:2013-09-18 16:23:33

标签: mysql

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

当我尝试创建索引时。我应该在一个查询中一起创建所有内容,如

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

或者我应该将它们分开并为每列创建索引?

2 个答案:

答案 0 :(得分:1)

这实际上取决于您如何规划查询这些列。你最安全的赌注只是为每一列制作索引,尽管这可能无法产生最佳性能。

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

  • 您需要在列值组合中强制执行唯一约束
  • 您知道您将始终使用列进行连接,其中子句,order by,group by等在特定组合中

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

  • 您正在加入,仅在user_id
  • 上进行加入
  • 您正在加入,在user_id和date
  • 等地方等
  • 你正在加入,在所有三列
  • 上等等

您将无法利用这些案例的索引

  • 您正在加入,日期等,或单独使用
  • 您正在加入,在日期等地使用

如需进一步阅读,请参阅以下有关多列索引的MySQL文档:

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

答案 1 :(得分:0)

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

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

请注意,date在索引中是最后一位,因为您有不平等。

MySQL碰巧就多列索引及其使用方式进行了很好的讨论here