列ごとの順序にはインデックスが必要ですか?


35

結果の検索に使用されるインデックスをテーブルに追加しました。ASCまたはDESCの順序で結果を表示しています。その列にはインデックスが必要ですか?そのテーブルにはさらに2つのインデックスがあります。その列にインデックスを作成するかどうかによって、パフォーマンスはどのように影響しますか?


2
クエリを投稿してください
RolandoMySQLDBA

回答:


26

はい、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で終了できます。これらのキーワードは、昇順または降順のインデックス値ストレージを指定するための将来の拡張に使用できます。現在、それらは解析されますが無視されます。インデックス値は常に昇順で保存されます。


3
「MySQLは混合ASC、DESCにインデックスを使用できません」。これの参照?
ypercubeᵀᴹ

CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);動作するはずです。
フランクヘイケンズ

私のソースは、回答にリンクされているmysqlのドキュメントです。「mix」を検索します。
アーロンブラウン

3
MySQLはCREATE INDEXでascとDescを解析しますが、無視します。インデックスは常に昇順で保存されます。dev.mysql.com/doc/refman/5.5/en/create-index.html
アーロンブラウン

1
MySQLの8.0と新しい:今ではの混合物を使用することができますASCし、DESC 場合INDEX、同じ混合物を持っています。
リックジェームズ

4

PostgreSQLに関連する回答について疑問に思っている人にとっては、答えはイエスであり、インデックスが使用されます。あたりとしてPostgreSQLのドキュメント問い合わせプランナは、「仕様と一致する使用可能なインデックスをスキャンすることによって、または物理的な順序で表をスキャンし、明示的なソートを行うことによって、いずれかの仕様、ORDER BYを満足させる検討していきます。」これは、プランナが使用できるインデックスがある場合、それを行うことを意味し、一致する行を取得した後、ソートの実行に戻ります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.