回答:
はい、MySQLは(特定の条件下で)ORDER BYの列にインデックスを使用できます。ただし、MySQLは、ASC、DESCが混在するインデックス(SELECT * FROM foo ORDER BY bar ASC, pants DESC
)を使用できません。クエリとCREATE TABLEステートメントを共有すると、より具体的に質問に答えることができます。
ORDER BY句を最適化する方法のヒント:http : //dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html
編集2012-01-21 8:53 AM
ORDER BYでASC / DESCが混在したインデックスを使用することに関する私の声明の出典について質問がありました。ORDER BYの最適化ドキュメント:
MySQLはインデックスを使用してORDER BYを解決できない場合がありますが、インデックスを使用してWHERE句に一致する行を検索します。これらのケースには次のものがあります。
...
ASCとDESCを混ぜます:
SELECT * FROM t1 ORDER BY key_part1 DESC、key_part2 ASC;
...
また、DESCキーワードはCREATE INDEXでは無意味です
index_col_nameの指定は、ASCまたはDESCで終了できます。これらのキーワードは、昇順または降順のインデックス値ストレージを指定するための将来の拡張に使用できます。現在、それらは解析されますが無視されます。インデックス値は常に昇順で保存されます。
CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);
動作するはずです。
ASC
し、DESC
場合INDEX
、同じ混合物を持っています。
PostgreSQLに関連する回答について疑問に思っている人にとっては、答えはイエスであり、インデックスが使用されます。あたりとしてPostgreSQLのドキュメント問い合わせプランナは、「仕様と一致する使用可能なインデックスをスキャンすることによって、または物理的な順序で表をスキャンし、明示的なソートを行うことによって、いずれかの仕様、ORDER BYを満足させる検討していきます。」これは、プランナが使用できるインデックスがある場合、それを行うことを意味し、一致する行を取得した後、ソートの実行に戻ります。