估计执行计划 SQL Server 排序?

1 sql-server sorting sort-operator

我正在运行一个查询并且执行它需要很长时间,查看执行计划我可以看到 51% 的成本在 SORT 中?在实际查询中,我没有按任何东西排序。

任何人都知道如何降低此排序百分比或将其全部删除?这是我正在运行的查询。

SELECT Time_ID,
       Site_Type_ID,
       Abandoned_ID,
       WorkType_ID,
       SUM (staging.dbo.measure.ring_time) AS Ring_Time,
       SUM (staging.dbo.measure.hold_time) AS Hold_Time,
       SUM (staging.dbo.measure.talk_time) AS Talk_Time,
       SUM (staging.dbo.measure.acw_time)  AS ACW_Time,
       COUNT(*)                            CallCount
FROM   measure
       INNER JOIN DataMartEnd.dbo.Time_Dim
         ON measure.StartTimeDate BETWEEN Time_Dim.Time_Start AND Time_Dim.Time_End
       INNER JOIN datamartend.dbo.Site_Type_Dim
         ON measure.DBID = Site_Type_Dim.Site_Type_Code
       INNER JOIN datamartend.dbo.Abandoned_Call_Dim
         ON measure.Abandoned = Abandoned_Call_Dim.abandoned_value
       INNER JOIN DataMartEnd.dbo.Work_Type_Dim
         ON measure.DBID = work_type_dim.MIG_Site_ID
            AND Work_Type_Dim.Work_Type_Code = measure.Queue
            AND measure.StartTimeDate BETWEEN Work_Type_Dim.DimEffectiveStartDtm AND Work_Type_Dim.DimEffectiveEndDtm
GROUP  BY Abandoned_ID,
          WorkType_ID,
          Site_Type_ID,
          time_id 
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助。

Rem*_*anu 6

Group by Abandoned_ID, WorkType_ID , Site_Type_ID, time_id
Run Code Online (Sandbox Code Playgroud)

实现 group by 的一种方法是对输入进行排序。流聚合 Showplan 运算符

Stream Aggregate 运算符需要按其组内的列排序的输入。如果数据由于先前的 Sort 运算符或由于有序索引查找或扫描而尚未排序,则优化器将在此运算符之前使用 Sort 运算符。

QED。

进一步阅读:关于Stream Aggregate和替代Hash Aggregate 的Craig Freedman 博客条目。