【发布时间】:2019-08-21 18:18:34
【问题描述】:
这里是查询:
SELECT sdd.CompanyID
,sdd.ClassID
,sdd.PeriodID, SUM(sdd.Volume) AS VolumeTotal, SUM(sdd.Dollars) AS DollasTotal
,COUNT(LogID) as LogIDCount
FROM (SELECT dp.CompanyID
,ds.ClassID
,fs.PeriodID, fs.LogID, sum(fs.Volume) AS Volume,sum(fs.Dollars) AS Dollars
FROM DW.FactSupplyDataDetail fs WITH (NOLOCK)
JOIN DW.DimPLProvider dp WITH (NOLOCK)
ON fs.PLProviderID = dp.PLProviderID
JOIN DW.DimSupply ds WITH (NOLOCK)
ON fs.SupplyID = ds.SupplyID
WHERE fs.PeriodID between 201901 and 201907
GROUP BY dp.CompanyID
,ds.ClassID
,fs.PeriodID,fs.LogID) sdd
GROUP BY sdd.CompanyID
,sdd.ClassID
,sdd.PeriodID
这里是查询的执行计划:
https://www.brentozar.com/pastetheplan/?id=rkoxSEjEH
DW.FactSupplyDataDetail has 10590237 records
DW.DimPLProvider has 5071 records
DW.DimSupply has 81001 records
result of a query is 1992094
【问题讨论】:
-
你能用paste the plan给我们吗?
-
您可以摆脱无用的
SUM()列。 -
小心adding NOLOCK无处不在......它有一些可怕的副作用
-
通过仅向我们展示部分查询,您混淆了问题。如果你做的不仅仅是获得一个 COUNT() 那么我的 cmets 不适用。
标签: sql-server performance sql-server-2016