gpt4 book ai didi

mysql - 几乎相同的查询中的巨大性能差异

转载 作者:行者123 更新时间:2023-11-30 21:54:45 24 4
gpt4 key购买 nike

我有两个查询来计算一个相对较大的表中的行数。为了允许按特定名称进行过滤,我向其左连接了一个较小的表。

我的第一次尝试产生了查询 #1(见下文),结果非常非常慢(6-7 秒)。稍微研究一下查询后,我开始查询 #2(见下文),它似乎更快地完成同样的事情(< 0.05 秒)。

查询 #1(> 6 秒):

SELECT COUNT(*)
FROM bigtable
LEFT JOIN (
SELECT DISTINCT LocalKey, Name
FROM smalltable
) AS smalltable ON bigtable.ForeignKey = smalltable.LocalKey;

查询 #2(< 0.05 秒):

SELECT COUNT(*)
FROM bigtable
LEFT JOIN (
SELECT DISTINCT LocalKey, Name
FROM smalltable
) AS smalltable ON bigtable.ForeignKey = smalltable.LocalKey
WHERE smalltable.LocalKey LIKE "%";

两个查询返回完全相同的数字 (50300)。bigtable 有 50300 行,smalltable 有 680 行。为了尽可能多地去除因素,我确保 bigtable 中的所有记录在 smalltable 中都有一个(唯一的)匹配行。smalltable.LocalKey 是索引,也是 bigtable 的主键。两个表都使用 OPTIMIZE TABLE [table]; 进行了优化。 smalltable 中的所有行都与 smalltable.LocalKey LIKE "%" 匹配。

我已经尝试详尽地搜索这种现象,但是,我没有找到任何解释。有没有人能解释为什么第一个查询慢得多,并且如果可能的话,还有比查询 #2 更好的解决方案?

编辑:

Explain Extended for query #1

Explain Extended for query #2

最佳答案

运行每个查询后,SHOW $WARNINGS 将立即向您显示优化的查询执行顺序。发布查询 #1 和查询 #2 的 SHOW $WARNINGS 应该有助于我们理解为什么查询 #2 如此之快。

关于mysql - 几乎相同的查询中的巨大性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45683429/

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