我想缩短查询的执行时间



我有查询来加载 15 亿条记录,我想缩短执行时间

SELECT TOP (20) a.code AS No_, 
                lastyear =
(
    SELECT SUM(c.[Sales Amount (Actual)])
    FROM [Uneek Clothing Company Ltd$Value Entry] c
    WHERE c.[Source Type] = 1
          AND c.[Global Dimension 1 Code] = a.Code
          AND c.[Source No_] = 'WOR07'
          AND c.[Posting Date] BETWEEN '01/01/2018' AND '7/16/2018'
), 
                CurrentYear =
(
    SELECT SUM(c.[Sales Amount (Actual)])
    FROM [Uneek Clothing Company Ltd$Value Entry] c
    WHERE c.[Source Type] = 1
          AND c.[Global Dimension 1 Code] = a.Code
          AND c.[Source No_] = 'WOR07'
          AND c.[Posting Date] BETWEEN '01/01/2019' AND '7/16/2019'
)
FROM [Uneek Clothing Company Ltd$Item Category] a
ORDER BY CurrentYear DESC;

使用要查找数据的字段在表上创建索引。为了提高速度,您可以包含需要引用的货币字段。例如:

CREATE INDEX Idx_SourceType_GlobalDimension1Code_SourceNo_PostingDate
ON [Uneek Clothing Company Ltd$Value Entry] (
    [Source Type], 
    [Global Dimension 1 Code],
    [Source No_],
    [Posting Date]
    )
INCLUDE ([Sales Amount (Actual)])

我不想偷@Laughing Vergil的雷声,但我在他/她的答案之上有一个建议(我没有排名来评论(。应创建索引,以便按特定性递减顺序对列进行排序。我的猜测是,您的索引应该如下所示,以最大限度地提高您的性能:

CREATE INDEX Idx_SourceType_GlobalDimension1Code_SourceNo_PostingDate
ON [Uneek Clothing Company Ltd$Value Entry] (
    [Source No_],
    [Posting Date]
    [Global Dimension 1 Code],
    [Source Type], 
)
INCLUDE ([Sales Amount (Actual)])

这假设 [Source No_] 是另一个表上的唯一键,[发布日期] 是一个日期(这是非常唯一的(,并且代码和类型是非常小的类似查找的值,只有几个不同的可能值。

但是,需要注意的一点是,此索引是专门为此查询设计的。如果从将来的查询中取出 [源No_],则可能还需要创建另一个索引来处理该特定情况。索引维护是DBA的一场持续战斗,有更聪明的人(又名Brent Ozar(来帮助你克服这些挑战。

最新更新