gpt4 book ai didi

sql - 为什么 int 字段上的 join Cint(char field) 比 int 到 int 更快?

转载 作者:行者123 更新时间:2023-12-04 14:26:08 24 4
gpt4 key购买 nike

我在 microsoft access 中运行以下 2 个查询,产生相同的结果,但第二个查询运行大约 5 秒,而第一个查询大约需要 10 分钟。我完全迷失在这里。第一个查询将一个整数字段连接到另一个整数字段上,第二个查询连接一个 cint(text)字段到一个整数字段并运行得更快。

运行 10 分钟:

我设置 tblA.number = 整数字段

SELECT A, B, sum(d) as C
FROM tblA
INNER JOIN (tblB INNER JOIN tblC ON tblB.A = tblC.A)
ON tblA.number = tbl B.B)
GROUP BY A, B
HAVING F like '*808*'

在 5 秒内运行: - 注意 cint(tblA.A)
I set tblA.number = text field
SELECT A, B, sum(d) as C
FROM tblA
INNER JOIN (tblB INNER JOIN tblC ON tblB.A = tblC.A)
ON cint(tblA.number) = tbl B.B)
GROUP BY A, B
HAVING F like '*808*'

最佳答案

您是说 tblA.number 是 char 数据类型吗?

我认为使用 cint() 会更快是有道理的,因为您将字符串转换为数字,然后与 tblB.B 列进行数字比较。

我无法想象有人会惊讶于比较字符串(逐个字符发生)将运行任何接近于比较两个数字的操作。

在第一个示例中,由于数据类型不匹配,因此第一个 tblA.number 是字符串,因此它可能会将 tblB.B 列转换为字符串以进行比较。

因此将数字转换为字符串可能会更慢(需要为字符串空间分配更多内存,然后在您丢弃字符串时会出现垃圾收集问题)。因此,不仅创建字符串会花费时间,而且更糟糕的是进行字符串比较会更慢。

使用 cint() 将字符串转换(转换)为数字(可能比字符串更快),然后进行数字比较(肯定比字符串比较快)。

所以我不能肯定地说以上就是原因,但这肯定不会令人惊讶。如前所述,使用 ShowPlan 可能会在此处产生更多信息。

关于sql - 为什么 int 字段上的 join Cint(char field) 比 int 到 int 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8811314/

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