为什么查询优化器没有使用表中定义的索引? (MySQL的)

时间:2014-10-08 11:25:01

标签: mysql sql indexing key optimization

我有以下架构

CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `d` date NOT NULL,
  `y` year(4) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `y` (`y`)
) ENGINE=MyISAM CHARSET=utf8;

当我运行" EXPLAIN SELECT * FROM test y =' 2010';"

虽然表中为列" y"定义了一个索引,但查询优化器没有使用它。

可能是什么原因?

1 个答案:

答案 0 :(得分:1)

MySQL必须发现值得使用索引。

这通常是dbms期望只找到几条记录的情况。即使是低至10%甚至5%的所有记录的东西都可能被认为太多而且dbms决定更好地扫描整个表格而不必混淆整个索引。

所以答案是:MySQL不认为在这里使用索引是合适的。它认为全表扫描可能更快。