MySQL - 为什么这个查询不使用索引(根据解释)

时间:2011-10-11 15:58:31

标签: mysql indexing

我正在玩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上的键值?

1 个答案:

答案 0 :(得分:5)

有时MySQL不使用索引,即使有索引也是如此。这是因为它比直接阅读表需要更少的搜索。在这种情况下,似乎有6行。

如果您拥有更实际的数据集,请务必定期运行OPTIMIZE TABLEANALYZE TABLE

如果您认为自己可以比优化工作做得更好,可以使用Index Hint Syntax