我有以下架构
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"定义了一个索引,但查询优化器没有使用它。
可能是什么原因?
答案 0 :(得分:1)
MySQL必须发现值得使用索引。
这通常是dbms期望只找到几条记录的情况。即使是低至10%甚至5%的所有记录的东西都可能被认为太多而且dbms决定更好地扫描整个表格而不必混淆整个索引。
所以答案是:MySQL不认为在这里使用索引是合适的。它认为全表扫描可能更快。