WHERE句で使用されているインデックスの最後の列である列を使用するORDER BY句を含むクエリがあります。
SELECT
cols
FROM
tables
WHERE
col_1 = x
AND col_2 = y
AND col_3 = z
ORDER BY col_4
インデックスは列(col_1、col_2、col_3、col_4)にこの順序で作成されます。
クエリのプロファイルを作成すると、99%以上の時間が「結果の並べ替え」状態で費やされます。 col_4は、違いがある場合のタイムスタンプ列です。 ORDER BYは特定の状況でのみインデックスを使用できることを理解していますが、オプティマイザがいつ使用するかについては、まだ少し不思議です。
クエリの前にEXPLAIN EXTENDED
を追加して、自分で結果を確認する必要があります。
のエントリが必要です
この列がNULLの場合、関連するインデックスはありません。この場合、WHERE句を調べて、インデックス付けに適した列を参照しているかどうかを確認することで、クエリのパフォーマンスを向上させることができる場合があります。
そして
キー列は、MySQLが実際に使用することを決定したキー(インデックス)を示します。 MySQLが可能性のあるキーのインデックスの1つを使用して行を検索することを決定した場合、そのインデックスはキー値としてリストされます。
詳細については、これを参照してください Explain output および Explain join_types
クエリでEXPLAIN
を使用します(explain select-or-whatever-your-query-is
)。
possible_keys
使用可能なものを示し、key
実際に使用したものを示します。