Mysql:将这两个索引合并为一个?

时间:2011-05-13 23:22:28

标签: mysql

我有以下查询:

SELECT * FROM items 
WHERE collection_id = 10 
ORDER BY item_order ASC,id DESC 
LIMIT 25

现在我有两个索引,一个在collection_id,id上,另一个在collection_id,item_order上。 如果用户没有为项目指定订单,则item_order可以为null,在这种情况下,我希望它们按id排序。

我的索引设置是否最佳,或者有没有办法让一个三列索引同时处理id和item_order的排序?将“collection_id”列索引两次似乎是多余的。

3 个答案:

答案 0 :(得分:3)

此查询的最佳索引为(collection_id,id,item_order)

MySQL每个查询只会为每个表使用一个索引,它会按查询中的列顺序查找匹配的索引。确定此查询的索引应该是什么样的最简单方法是查看ORDER BY条件后面的WHERE条件。

如果有疑问,请大量使用EXPLAIN,并确保不会不必要地创建临时表或使用filesort。

答案 1 :(得分:1)

在select语句之前使用EXPLAIN会告诉你它正在使用哪些索引。官方文档在这里:

MySQL 5: Using EXPLAIN

这里有一个很好的教程:

Optimizing MySQL Queries and Indexes

答案 2 :(得分:0)

对于上面的查询,理想的索引将是(collection_id,item_order,id)。

多次索引同一列绝不是浪费时间 - 只要你没有最终得到两个相同的索引或从未使用过的索引。