gpt4 book ai didi

MySQL解释输出

转载 作者:可可西里 更新时间:2023-11-01 07:35:49 25 4
gpt4 key购买 nike

有没有人知道

之间的区别

Using Index

Using where; Using index

在 mysql 的解释输出中(在 Extra 中)?

复制:

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) from tmp_t1 where 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> 解释 select count(1) from tmp_t1 where 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,而第二种情况在 varchar(50) 字段上执行。但这有什么关系呢??

感谢您的帮助!

最佳答案

我应该确认差异确实非常令人困惑。其他情况下使用where; Using index 可能意味着索引已被使用,但它已被完全扫描。当您在 (a, c) 上有一个复合索引,但进行类似 SELECT a FROM thetable WHERE c = 1 的查询时。在这种情况下,MySQL 将使用索引(因为它包含所有必要的数据并且在内存中),但将对索引进行全面扫描。

结果你应该看到变量在

SHOW STATUS LIKE 'Handler_read_next';

将增加到表中的行数。

但是查询不是这样的:

select count(*) from tmp_t1 where b='b1';

它检查索引中的确切行数。我认为这是某种错误或功能,还有一个证据表明结果 EXPLAIN as 本身并不是什么值得依赖的东西。有趣的是,对于较大表和复合索引的查询,其中 VARCHAR 是索引中的第二个 EXPLAIN 有时不显示 Using where。我很困惑。

关于MySQL解释输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8986399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com