gpt4 book ai didi

mysql - 运行EXPLAIN时,如果key的字段值不为null,Extra为空,是否使用了key?

转载 作者:可可西里 更新时间:2023-11-01 08:06:34 37 4
gpt4 key购买 nike

在没有索引的情况下运行此 EXPLAIN 查询时

EXPLAIN SELECT exec_date,
100 * SUM(CASE WHEN cached = 'no' THEN 1 ELSE 0 END) / SUM(1) cached_no,
100 * SUM(CASE WHEN cached != 'no' THEN 1 ELSE 0 END) / SUM(1) cached_yes
FROM requests
GROUP BY exec_date

这是输出

id  select_type table       type    possible_keys   key     key_len ref     rows    Extra
1 SIMPLE requests ALL NULL NULL NULL NULL 478619 Using temporary; Using filesort

如果我创建一个索引

ALTER TABLE requests ADD INDEX exec_date(exec_date);

输出是

id  select_type table       type    possible_keys   key         key_len ref     rows    Extra
1 SIMPLE requests index NULL exec_date 4 NULL 497847

既然 Extra 的值是空的,那是否意味着键 exec_date 没有被使用?

在测试服务器上,实际(不是 EXPLAIN 语句)查询使用和不使用索引的执行时间是相同的。

最佳答案

Using index 并不是你想的那样。如果它出现在 Extra 列中,则表示优化器实际上并未读取整行,而是使用索引(专门)查找列信息。

key 仍可用于其他用途,例如,如果您有 WHERE 子句等,则执行查找。在您的特定场景中,例如,Using 的消失temporary; 实际上确实意味着你的索引正在被使用,因为 MySQL 不再需要将你的表的内容重新排列到一个新的临时表中来执行 GROUP BY

关于mysql - 运行EXPLAIN时,如果key的字段值不为null,Extra为空,是否使用了key?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557405/

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