MySQL Explain filtered
クエリにおける条件フィルタのステップでフィルタされる行の推定割合
一般に、高ければ高いほど直前のデータの取得処理が効率的であるといえる
公式ドキュメントの記述
filtered カラムは、テーブル条件でフィルタされるテーブルの行の推定割合を示します。 最大値は 100 で、これは行のフィルタリングが行われなかったことを意味します。 100 から減少する値は、フィルタリングの量が増加していることを示します。rows には調査された推定行数が表示され、rows×filtered には次のテーブルと結合された行数が表示されます。 たとえば、rows が 1000 で filtered が 50.00 (50%) の場合、次のテーブルと結合される行数は 1000×50% = 500 になります。
ohbarye.icon これがわかりづらく、少ない方が良いようにも読める
実行計画生成以降のMySQLの処理の流れは以下
データの取得(Data Retrieval)
適切なインデックスが存在する場合、ここでインデックスを使用する
ここで100行が取得されたと仮定する
条件フィルタ(Filtering)
WHERE句やJOINの条件に基づいてデータをフィルタリングする
100行のデータに対してWHERE句が適用され、最終的に10行のみが条件に合致する場合、filteredは10%になる
1つ前のデータの取得ステップで90%の余分な行を取得したことを意味する
100行のデータに対してWHERE句が適用され、最終的に100行が条件に合致する場合、filteredは100%になる
1つ前のデータの取得ステップで余分な行なく取得できたことを意味する。インデックスによる絞り込みが効率的であると判断できる
最終的な結果セットを作成して返す
参考