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

标签 sql-server azure t-sql stored-procedures

我们在 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/

相关文章:

azure - 从 Azure 门户中测试 Web 聊天时,新机器人 channel 注册收到 403 禁止

sql - FOR XML 无法序列化 char(0x0000),即使已包含 REPLACE 函数来替换 Char(0x0000)

sql-server - 截断一些表并将其余表保留在 SQL Server 中的同一数据库中

sql - T-SQL 中的 case 语句中断

Azure,将网站下载到本地开发环境?

azure - 在 terraform 的 azure data explorer 中使用 eventhub 的默认消费者组

SQL CASE 变量

t-sql - 如何在SQL中计算平均日期出现频率

c# - 如何在 datagridview C# 中格式化位数据类型列?

java - 如何在 sql-server 数据库表上构建自由流搜索?