2011-12-07 148 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

理論是一回事,實際上,你總是有標杆。