有谁知道MySQL的解释输出
之间的区别使用索引
和
使用其中;使用索引
mysql的解释输出(在额外)?
繁殖:
CREATE TABLE `tmp_t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) NOT NULL DEFAULT '0',
`b` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k1` (`a`),
KEY `k2` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=5;
insert into tmp_t1 (a,b) values (1,'b1'), (1, 'b2'), (2, 'b3');
的MySQL>解释SELECT COUNT(1)从tmp_t1其中a = 1 \ G变
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tmp_t1
type: ref
possible_keys: k2,kz
key: kz
key_len: 4
ref: const
rows: 3
Extra: Using index
1 row in set (0.11 sec)
的MySQL>从tmp_t1其中b(1)解释选择计数='b1'\ G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tmp_t1
type: ref
possible_keys: k3
key: k3
key_len: 52
ref: const
rows: 2
Extra: Using where; Using index
1 row in set (0.00 sec)
有没有人知道为什么在第一种情况下re只是在额外的领域使用索引,而在第二个是“使用where;使用索引”? 这两种情况之间的区别在于第一种情况在整数上运行WHERE,第二种情况在varchar(50)字段上执行。 但它为什么重要?
感谢您的帮助!
'使用where'说,有一个过滤器(='WHERE'条款),在SQL。 '使用索引'表示查询使用索引。两者都是不同的东西。我不明白这个问题。 – Kaii
问题是mysql为什么只使用索引来执行第一个查询,而为了执行查询第二个“使用where”被报告。我问,因为我无法理解这两个查询之间的区别 - 一个使用在条件的整数,而另一个为varchar字段的事实如何影响MySQL的方式执行这些(为什么第二个查询不使用“index only”?) –
在第一个EXPLAIN中提到并实际使用的'kz'索引是什么? – newtover