我有以下问题:
select from `table` where `a`>0 order by `b` desc limit 0, 10
select from `table` where `a`<0 order by `b` desc limit 0, 10
我希望他们尽可能快地跑。现在的问题是什么是最好的解决方案?
我的猜测是使用多列索引会得到最好的结果......但是列的正确顺序是什么? MySQL首先匹配列a
然后再b
,还是先b
然后a
?
由于
答案 0 :(得分:0)
(a,b)
上的索引应该可以快速完成。
文档说
即使ORDER BY与索引不完全匹配,也可以使用索引,只要索引的所有未使用部分和所有额外的ORDER BY列都是WHERE子句中的常量即可。
现在如果&gt; 0,可以认为是常数,正如我认为的那样,那么索引(a,b)可能会快速起作用。虽然你可能想尝试看看解释计划。
http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html
答案 1 :(得分:0)
理论是一回事,在实践中,总是必须进行基准测试。