我正在玩EXPLAIN并在这个简单的查询中运行它:
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上的键值?
答案 0 :(得分:5)
有时MySQL不使用索引,即使有索引也是如此。这是因为它比直接阅读表需要更少的搜索。在这种情况下,似乎有6行。
如果您拥有更实际的数据集,请务必定期运行OPTIMIZE TABLE和ANALYZE TABLE。
如果您认为自己可以比优化工作做得更好,可以使用Index Hint Syntax。