gpt4 book ai didi

sql-server - 有关 Azure SQL 数据仓库的 SQL Server 存储过程性能调整的建议

转载 作者:行者123 更新时间:2023-12-03 02:48:16 25 4
gpt4 key购买 nike

我们在 Azure SQL 数据仓库中有一个表,其中包含每日和每月的销售详细信息。我们在 React/Node 中开发了一个仪表板,它调用数据仓库中的存储过程来显示销售趋势。存储过程当前根据不同的列和不同的谓词计算聚合。

问题在于,在现有代码中,有多个带有 group by 的 select 语句用于计算不同的总金额。为了使 sp 运行得更快,我需要在一个 select 查询中而不是在多个 select 查询中获取所有聚合金额。

我重写了 sp 以使用分组集,它在 Azure SQL Server 中运行得更快,但此功能在 SQL 数据仓库中不可用。

请告诉我是否有任何替代方法可以在 Azure SQL DW 中实现此分组集功能。

SQL Server 
--------------
select ,month,week,dept_no,sales_amount_this_year,sales_amount_last_year
from sales_table
where month=1 and year =2019 and dept_no in ('A1','B1',C1')
group by grouping sets ( (month),
(month,week),
(week,dept_no) )

sales_table 每月大约有 1 亿行。请帮助建议 Azure SQL DW 中分组集的替代方案,以获得与 SQL Server 中分组集相同的性能。

最佳答案

请引用此文档Group by options in SQL Data Warehouse 。它提供了GROUPIN SETS的解决方法。

GROUP BY T-SQL 子句将数据聚合到行的汇总集。 GROUP BY 有一些 SQL 数据仓库不支持的选项。这些选项都有解决方法。这些选项是

  • GROUP BY 和 ROLLUP
  • 分组集
  • 使用 CUBE 进行 GROUP BY

详情请见Rollup and grouping sets options :

这里最简单的选择是使用 UNION ALL 来执行汇总,而不是依赖显式语法。结果完全一样

以下示例使用带有 ROLLUP 选项的 GROUP BY 语句:

SELECT [SalesTerritoryCountry]
, [SalesTerritoryRegion]
, SUM(SalesAmount) AS TotalSalesAmount
FROM dbo.factInternetSales s
JOIN dbo.DimSalesTerritory t ON s.SalesTerritoryKey = t.SalesTerritoryKey
GROUP BY ROLLUP (
[SalesTerritoryCountry]
, [SalesTerritoryRegion]
)
;

希望这有帮助。

关于sql-server - 有关 Azure SQL 数据仓库的 SQL Server 存储过程性能调整的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57522990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com