首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL索引使用

MySQL索引使用
EN

Stack Overflow用户
提问于 2013-04-22 09:55:28
回答 1查看 427关注 0票数 4

我正在对一个简单的表执行一个非常简单的选择,其中我正在过滤的列有一个索引。

下面是模式:

代码语言:javascript
复制
 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:

代码语言:javascript
复制
SELECT * FROM `tmp_inventory_items` WHERE `transmission_id` = 330

但是,在解释查询时,(我看到没有使用索引),为什么(表在本地机器上大约有20行)?

代码语言:javascript
复制
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

即使我暗示使用索引(Transmission_id)的mysql .这在我看来很奇怪(MySQL版本5.5.28)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-22 10:27:34

因为MySQL的算法告诉它,准备一个索引并使用它将使用更多的资源,而不是简单地执行没有索引的查询。

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

如果您愿意,可以使用FORCE INDEX(transmission_id) (记录在这里),它将通知MySQL表扫描被认为是非常昂贵的,但是不建议对20行进行判断,它只是没有价值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16144202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档