web-dev-qa-db-ja.com

MySQLでのソートにインデックスが使用されているかどうかを確認するにはどうすればよいですか?

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は特定の状況でのみインデックスを使用できることを理解していますが、オプティマイザがいつ使用するかについては、まだ少し不思議です。

10
Chris Cooper

クエリの前にEXPLAIN EXTENDEDを追加して、自分で結果を確認する必要があります。

のエントリが必要です

  • possible_keys

この列がNULLの場合、関連するインデックスはありません。この場合、WHERE句を調べて、インデックス付けに適した列を参照しているかどうかを確認することで、クエリのパフォーマンスを向上させることができる場合があります。

そして

  • キー

キー列は、MySQLが実際に使用することを決定したキー(インデックス)を示します。 MySQLが可能性のあるキーのインデックスの1つを使用して行を検索することを決定した場合、そのインデックスはキー値としてリストされます。

詳細については、これを参照してください Explain output および Explain join_types

13
Mahesh Patil

クエリでEXPLAINを使用します(explain select-or-whatever-your-query-is)。

possible_keys使用可能なものを示し、key実際に使用したものを示します。

1
sjas