我用EXPLAIN玩,跑了它在这个简单的查询:MySQL的 - 为什么没有这个查询使用索引(按说明)
EXPLAIN SELECT * FROM actions WHERE user_id = 17;
,并很惊讶看到这样的输出:
select_type SIMPLE
table actions
type ALL
possible_keys user_id
key null
key_len null
ref null
rows 6
extra Using where
我的理解是,这意味着查询中没有使用索引,是正确的吗? (这里只有6行总表中的这个时候都是,但会有更多)
表定义为(inpart):
CREATE TABLE `actions` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
...
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1
为什么这是不是可以用密钥值在user_id上?
索引现在未被使用的事实并不意味着它将来不会被使用。 – Karolis
在这种情况下扫描6行可能会更快。如果你再添加几百行呢? –
@Karolis没什么意义 - 对主键的查询甚至对6行也使用该索引。 – Will