2011-12-07 63 views
0

我有以下疑问:MySQL查询优化 - 使用索引

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 

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

  • 对于B
  • 创建一个多列索引的创建索引,创建索引,B
  • 对于B创建多列索引,一个

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

感谢上(a,b)

+1

EXPLAIN说什么? –

+0

在这种情况下,复合索引不起作用。 –

+0

你的表中'a> 0'和'a <0'的行数是多少? –

回答

0

指数应该做得很快。

文件说

该指数还可以用来即使ORDER BY不完全匹配索引,只要所有的指标BY列未使用的部分和所有额外的ORDER的是常数在WHERE子句中。

现在,如果> 0,可因为我认为它应该,那么指数(A,B)可以快速工作全部视为常数。虽然你可能想试试看解释计划。

http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

0

理论是一回事,实际上,你总是有标杆。