MySQL索引使用

MySQL索引使用,mysql,sql,performance,Mysql,Sql,Performance,我在一个简单的表上执行一个非常简单的select,在这个表中,我筛选的列有一个索引 以下是模式: CREATE TABLE IF NOT EXISTS `tmp_inventory_items` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `transmission_id` int(11) unsigned NOT NULL, `inventory_item_id` int(11) unsigned DEFAULT NULL,

我在一个简单的表上执行一个非常简单的select,在这个表中,我筛选的列有一个索引

以下是模式:

 CREATE TABLE IF NOT EXISTS `tmp_inventory_items` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `transmission_id` int(11) unsigned NOT NULL,
  `inventory_item_id` int(11) unsigned DEFAULT NULL,
  `material_id` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `transmission_id` (`transmission_id`)
  KEY `inventory_item_id` (`inventory_item_id`),
  KEY `material_id` (`material_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;
以下是SQL:

SELECT * FROM `tmp_inventory_items` WHERE `transmission_id` = 330
但是,在解释查询时,我看到索引没有被使用,为什么会这样呢(该表在我的本地计算机上大约有20行)


即使我提示mysql使用索引(传输id),也没有使用任何键。。。这在我看来很奇怪(MySQL版本5.5.28)

,因为MySQL的算法告诉它,准备索引并使用它比不使用索引就执行查询要消耗更多的资源

当您向DBMS提供查询语法时,它所做的一件事就是尝试确定处理查询的最有效方式(通常至少有几十种方式)


如果您愿意,您可以使用
强制索引(传输id)
(),这将通知MySQL,表扫描被认为是非常昂贵的,但不建议确定20行,因为它没有价值。

可能是因为行数没有达到需要索引的阈值?
id  select_type table                   type    possible_keys   key     key_len ref     rows    Extra
1   SIMPLE      tmp_inventory_items...  ALL     transmission_id NULL    NULL    NULL    13      Using where