我有一个表,其中有一列名为“日期”。
桌子看起来像这样
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会使用它。
这里发生了什么,为什么忽略日期索引?