Mysql查询优化 - 使用索引

时间:2011-12-07 14:21:37

标签: mysql sql optimization indexing

我有以下问题:

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

我希望他们尽可能快地跑。现在的问题是什么是最好的解决方案?

  • 为a创建索引,为b
  • 创建索引
  • 为a,b
  • 创建多列索引
  • 为b,a
  • 创建多列索引

我的猜测是使用多列索引会得到最好的结果......但是列的正确顺序是什么? MySQL首先匹配列a然后再b,还是先b然后a

由于

2 个答案:

答案 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)

理论是一回事,在实践中,总是必须进行基准测试。