EXPLAINレポートは解釈が難しいことが知られています。彼らはいくつかのフィールドにあまりにも多くの情報をオーバーロードしました。試してみてください
type: index
index-scanを実行していることを示します 、これは、インデックス内のすべてのエントリにアクセスしていることを意味します。
これは、クラスター化(プライマリ)インデックスではなくセカンダリインデックスに対して行われることを除いて、テーブルスキャンと同じ数のエントリにアクセスします。
type: index
が表示されたら 、EXPLAINはpossible_keys: NULL
を示しています つまり、効率的に検索するためにインデックスを使用することはできません。ただし、key: add_time
も表示されます これは、インデックススキャンに使用しているインデックスがadd_time
であることを意味します 。
インデックススキャンは、MySQLがそれ自体で式や関数呼び出しを最適化できないという事実によるものです。たとえば、特定の月の日付を検索しようとすると、month(add_time) = 4
を検索できます。 ただし、その月の日付はインデックス全体に散在しており、すべてがグループ化されているわけではないため、add_timeのインデックスは使用されません。
date(add_time)
インデックスで検索できるはずですが、MySQLはその推論を行いません。 MySQLは、関数を使用していることを認識するだけで、インデックスを使用しようとさえしません。
これが、MySQL5.7が