有人知道在mysql的explain输出(Extra字段)中
使用Index
和
使用where; 使用index
有什么区别吗?
问题再现:
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> 解释选择计算 tmp_t1 表中 a=1 的数据量 \G
(注意:保留了HTML标签)*************************** 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='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)
有人知道为什么在第一个案例中,额外字段中只有“使用索引”,而在第二个案例中是“使用where;使用索引”吗? 两种情况的区别在于第一个案例在整数上运行WHERE,而第二个案例在varchar(50)字段上执行。 但这有什么关系吗?感谢您的帮助!
WHERE
子句)。“using index” 表示查询使用了索引。这两个概念是不同的。我不明白问题所在。 - Kaiikz
索引是什么? - newtoverSHOW CREATE TABLE
与你的EXPLAIN SELECT
语句不匹配。你的EXPLAIN
中有"k3"和"kz"键,但在你的CREATE TABLE
中却没有。我猜你的问题可能是我们看不到的,因为你没有发布相关部分。 - KaiiCOUNT(a)
或者COUNT(b)
而不是COUNT(1)
,会发生什么? - Kaii