検索結果に使用するインデックスをテーブルに追加しました。 ASCまたはDESCの順序で結果を表示しています。だからその列はインデックスを持つべきかどうか?そのテーブルにさらに2つのインデックスがあります。その列にインデックスを作成するかどうかによって、パフォーマンスはどのように影響しますか?
はい、MySQLはORDER BYのカラムにインデックスを使用できます(特定の条件下で)。ただし、MySQLはmixed 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で終了できます。これらのキーワードは、昇順または降順のインデックス値ストレージを指定する将来の拡張で許可されています。現在、それらは解析されますが無視されます。インデックス値は常に昇順で格納されます。
PostgreSQLに関連する答えについて疑問に思う方は、答えは「はい」です。インデックスが使用されます。 PostgreSQLドキュメント のとおり、クエリプランナーは、「仕様に一致する使用可能なインデックスをスキャンするか、物理的な順序でテーブルをスキャンして明示的な並べ替えを行うことにより、ORDER BY仕様を満たすことを検討します。」これは、プランナが使用できるインデックスがある場合はそれを実行し、一致する行を取得した後にソートを実行するようにフォールバックすることを意味します。