sql - 加入视图时的 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
解决方案
你试过这个吗
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 上)
推荐阅读
- erlang - 为什么在 Erlang 中会显示 badarg?
- php - 有没有办法使用未设置的会话
- c - 如何创建一个函数来读取用户插入到 c 中的数组中的数字?
- matlab - 我无法得到 y 的结果
- html - 轻量级网站:使用延迟加载和锚点
- python - 修改一个两字字符串函数以在 Python 中获取 **kwargs?
- wordpress - 产品价格对齐 WooCommerce
- json - Vue根据另一个数组自动选择复选框
- node.js - 当我尝试“npm install firebase-tools -g”时如何修复“publish-please can't be installed global”错误
- mysql - 将 NULL 替换为 mysql 结果中的 \N