目前,我正在使用SQL Server 2008 R2。我的表有大约100,000条记录,其中包括以下列:ColA,ColB,Weight,Volume,Quantity。
这是我的查询字符串:
select ColA, ColB, sum(([Weight]/Volume)*Quantity) as 'Result'
from dbo.TblSample
group by ColA, ColB
花了这么长时间才完成(超过10分钟)。
有人可以帮我改进此查询吗?
非常感谢。
答案 0 :(得分:1)
SELECT SUM(result),ColA, ColB FROM
(
select ColA, ColB, ([Weight]/Volume)*Quantity as 'Result'
from dbo.TblSample
) tmp
group by ColA, ColB
或使用公用表表达式
WITH CTE
AS
-- Define the CTE query.
(
select ColA, ColB, ([Weight]/Volume)*Quantity as 'Result'
from dbo.TblSample
)
SELECT SUM(result),ColA, ColB FROM CTE group by ColA, ColB
答案 1 :(得分:1)
根据提供的信息,我建议您在列ColA
和ColB
上创建索引。我们的想法是,当用于分组或过滤的列被编入索引时,您可以获得性能提升。
有关详细示例,您可以查看this article