MySQL
        がクエリーを解決するのにテーブルスキャンを使用すると、EXPLAIN
        からの出力は、type
        カラムの ALL
        を表示します。これはたいてい次の条件下で生じます。
      
テーブルが小さすぎて、時間のかかるキールックアップよりもテーブルスキャンの実行のほうが遅くなります。このことは、10 行以下の行や短い行を持つテーブルにはよく起こることです。
            インデックスカラムに対して、ON
            または WHERE
            節内に使用できる制限はありません。
          
            インデックスカラムを定数値と比較し、MySQL
            は (インデックスツリーに基づいて)
            その定数がテーブルの大きすぎる部分をカバーしているか、またテーブルスキャンが高速に行われるかを計算します。項4.2.4. 「WHERE 節最適化」
            を参照してください。
          
ほかのカラムをとおして、低カーディナリティー (多数の行がキー値に当てはまる) でキーを使用します。この場合、MySQL は、キーを使用して多数のキールックアップが実行され、またテーブルスキャンもより速く行われるであろうと認識します。
小さいテーブルに対しては、テーブルスキャンはたいてい適切であり、実行の際の影響は無視されます。大きいテーブルに対しては、オプティマイザが間違ったテーブルスキャンを選択しないように、次の方法を試してください。
            スキャンされたテーブルのキー分布を更新するには、ANALYZE
            TABLE 
            を使用してください。項8.5.2.1. 「tbl_nameANALYZE TABLE 構文」
            を参照してください。
          
            MySQL
            に、テーブルスキャンは既存インデックスを使用するのに比べて大変時間がかかることを示すには、FORCE
            INDEX
            をスキャンされたテーブルに使用してください。
          
SELECT * FROM t1, t2 FORCE INDEX (index_for_column) WHERE t1.col_name=t2.col_name;
項8.2.8.2. 「インデックスヒントの構文」 を参照してください。
            オプティマイザに 1,000
            キーシーク以上のキースキャンがないことを認識させるには、--max-seeks-for-key=1000オプションで
            mysqld
            を起動させるか、または
            SET
            max_seeks_for_key=1000
            を使用してください。Server System Variables
            を参照してください。
          

