首页 > 解决方案 > 加入视图时的 SQL 性能问题

问题描述

我有这个查询,它在加入视图查询后需要永远运行。在加入之前,需要 2 分钟。连接查询本身需要 1 分钟。他们一起走了20多分钟。

我的问题是:

谢谢。这是查询:

    DECLARE @year INT=2017;
WITH data AS (
    SELECT M.Brand, M.SubBrand, M.Detail, S.Units, S.OB, [PRODUCTION_DATE] = RIGHT(S.DateId,2)
    , [PRODUCTION_YEAR] = LEFT(S.DateId,4), [PRODUCTION_MONTH] = SUBSTRING(CONVERT(VARCHAR(10), S.DateId),5,2) FROM [fact].[Sales] V
    LEFT JOIN [dim].[Material] M ON M.MaterialId = S.MaterialId
    INNER JOIN (SELECT [MaterialId]
                  ,[ROF]
                  ,[OB]
              FROM [Objectives].[load].[FactData_KPI_Sales_OB_ROF]
              WHERE ROF > 0) RFOB ON RFOB.MaterialId = S.MaterialId
    WHERE LEFT(S.DateId,4) > @year
)
SELECT Brand, SubBrand, Detail, [PRODUCTION_MONTH], [PRODUCTION_YEAR], OB, [01], [02], [03], [04], [05], [06], [07], [08], [09], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31]
FROM data
Pivot (
    SUM(Units)
    FOR [PRODUCTION_DATE] In
    ([01], [02], [03], [04], [05], [06], [07], [08], [09], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31])
    ) AS piv

标签: sqlsql-serverperformancejoinview

解决方案


你试过这个吗

    DECLARE @year INT=2017;
WITH data AS (
    SELECT M.Brand, M.SubBrand, M.Detail, S.Units, S.OB, [PRODUCTION_DATE] = RIGHT(S.DateId,2)
    , [PRODUCTION_YEAR] = LEFT(S.DateId,4), [PRODUCTION_MONTH] = SUBSTRING(CONVERT(VARCHAR(10), S.DateId),5,2) FROM [fact].[Sales] S
    LEFT JOIN [dim].[Material] M ON M.MaterialId = S.MaterialId
    INNER JOIN   [Objectives].[load].[FactData_KPI_Sales_OB_ROF] RFOB 

在 RFOB.MaterialId = S.MaterialId WHERE LEFT(S.DateId,4) > @year 和 RFOB.ROF > 0 上)


推荐阅读