我在 VB 中生成了一个很大的请求,它可能会变得很大......而且速度也很慢。
我有 3 种类型的碎片(1,2,3),我想要一包碎片的平均湿度所以请求的标头看起来像:
SELECT package.id,
CASE WHEN Sum(package.totalPce) = 0 THEN 0 ELSE
Sum(nbTooHumid * package.totalPce) / Sum(package.totalPce) END as tooHumid,
然后我用 nbTooDry 代替 nbTooHumid 做同样的事情,并将 HumidOk 作为第三个。
另外,我也计算其他字段,也除以 Sum(package.totalPce)。
所以,我或多或少打了 10 次电话:
Sum(package.totalPce)
我想知道是否是一件事减慢了我的请求,因为我的请求太长了,它的执行时间在 5 秒到 2 分钟之间变化。
编辑:阅读戈登的回答后,我将添加一个细节。
我从子请求中获得了 nbTooHumid 字段,并且我想在请求中获取的每个包都必须使用 UNION 从其他包中合并。
而且pieces 表有数百万个条目,所以,是的,这是IO 的问题。
我将添加一个更完整的示例,以便您全面了解我的请求是什么样的。
SELECT package.id,
CASE WHEN Sum(package.totalPce) = 0 THEN 0 ELSE
Sum(nbTooHumid * package.totalPce) / Sum(package.totalPce) END as tooHumid,
manyOtherFields
FROM
((SELECT count(*) as totalPce, otherFields
FROM pieces
WHERE idPackage = X and date between '2012-01-01' and '2012-01-11')
UNION
(SELECT ...)
)
请注意,这只是我的请求的平均格式,我没有使用确切的语法或字段名称。