GROUP BY导致性能问题

时间:2017-06-08 03:49:09

标签: sql sql-server

我和group-by-causing-a-huge-increase-in-query-execution-time有同样的问题。我将中间结果推送到表变量(如果我使用临时表没有区别)并声明一个适当的Clustered Index与我的group by子句相关,即

INDEX IX1 CLUSTERED (ContractID, Odometer DESC, FuelTranDate DESC)

查询结果大约需要8秒。但是,只要我在GROUP BY子句中使用结果(请参阅下面的示例),查询就会永远存在。查询的目的是检查燃料数据输入差异。

SELECT * FROM @Fuel --8 secs to run.

添加GROUP BY子句:

;WITH CTEFuelDate_YearMonthPreviousRow AS (
    SELECT *, Year(FuelTranDate) AS FuelTranYr, Month(FuelTranDate) AS FuelTranMn,
        ROW_NUMBER() OVER (PARTITION BY ContractID ORDER BY Odometer DESC, FuelTranDate DESC) AS RowNumberPerContract
    FROM @Fuel
), CTE0 AS (
    SELECT curr.*, 
        prev.FuelTranDate AS prevFuelTranDate, 
        prev.Odometer AS prevOdometer,
        prev.Quantity AS prevQuantity,
        curr.Odometer - prev.Odometer AS OdometerDifferential
    FROM CTEFuelDate_YearMonthPreviousRow curr
    JOIN CTEFuelDate_YearMonthPreviousRow prev ON curr.ContractID = prev.ContractID AND curr.RowNumberPerContract + 1 = prev.RowNumberPerContract
)
    SELECT ContractID, Avg(OdometerDifferential) As AvgOdometerDifferential, StDevP(OdometerDifferential) AS StDevPOdometerDifferential
    FROM CTE0
    GROUP BY ContractID

您是否需要执行计划作为屏幕截图或xml?

0 个答案:

没有答案