「日付」という列を持つテーブルがあります。
テーブルはこんな感じ
CREATE TABLE IF NOT EXISTS `offers_log_archive` (
...
`date` date DEFAULT NULL,
...
KEY `date` (`date`)
) ENGINE=InnoDB
このテーブルに対して次のクエリを実行します。
SELECT
*
FROM
offers_log_archive as ola
WHERE
ola.date >= "2012-12-01" and
ola.date <= "2012-12-31"
次に、次のことを行いました。
explain (SELECT
*
FROM
offers_log_archive as ola
WHERE
ola.date >= "2012-12-01" and
ola.date <= "2012-12-31" );
この説明の結果は
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE ola ALL date NULL NULL NULL 6206460 Using where
ALL 型になるのはなぜですか? 私が知っていることから、基本的には、クエリがテーブル内のすべての行を検査し、日付のインデックスを無視することを意味します。私はmysqlがこれを使用することを期待していますが。
ここで何が起こり、日付インデックスが無視されるのはなぜですか?