我有一个查询SELECT.. WHERE user_id='' && date>:expire && used=0;
当我尝试创建索引时。我应该在一个查询中一起创建吗
CREATE INDEX new_index ON table (user_id, date, used)
还是应该将它们分开并为每列创建索引?
我有一个查询SELECT.. WHERE user_id='' && date>:expire && used=0;
当我尝试创建索引时。我应该在一个查询中一起创建吗
CREATE INDEX new_index ON table (user_id, date, used)
还是应该将它们分开并为每列创建索引?
这实际上取决于您如何计划查询这些列。您最安全的选择是为每列创建索引,尽管这可能不会产生最佳性能。
多列索引适用于以下情况:
例如,对于您提出的组合索引(user_id、date、used),您只能在以下条件下使用该索引:
您将无法在这些情况下使用索引
为了进一步阅读,这里是关于多列索引的 MySQL 文档:
http://dev.mysql.com/doc/refman/5.5/en/multiple-column-indexes.html
根据您的查询,您应该使用多列索引。但是,正确的索引是:
CREATE INDEX new_index ON table (user_id, used, date)
请注意,这date
是索引中的最后一个,因为您有一个不等式。
MySQL 恰好在这里对多列索引及其使用方式进行了很好的讨论。