我找不到优化以下查询的方法:
SELECT *
FROM tbl
WHERE type='51' AND `start`<='2012-01-19'
ORDER BY end DESC
LIMIT 5我尝试过在单独的索引(类型、开始和结束)中为每一列编制索引,并且所有这些列都在相同的索引中,但是MySQL一直告诉我需要执行文件排序
这个查询是不是不可能被优化?
发布于 2012-01-20 03:44:31
可以,只要您在WHERE中有范围比较并按另一个字段排序- mysql就不能使用索引进行排序。
如果您有WHERE type='51' ANDstart='2012-01-19' ORDER BY end DESC或WHERE type='51' ANDstart<= '2012-01-19' ORDER BY start DESC,则可以
http://dev.mysql.com/doc/refman/5.5/en/order-by-optimization.html --这里有一个与您的问题相关的章节
发布于 2012-01-20 03:43:04
这在很大程度上取决于列类型和表中的所有内容,但您真正需要的只是type、start和end列的索引。
为了获得额外的提升,您可以在type和start之间创建索引。
发布于 2012-01-20 03:48:09
我的第一个想法是(*)扩展到没有索引的行。
如果不是,你肯定会从Multiple-Column Index中受益。
我将尝试并学习如何在索引定义中创建具有最低基数(大约唯一的组合)的列的顺序。
https://stackoverflow.com/questions/8932173
复制相似问题