【发布时间】:2018-07-06 12:48:46
【问题描述】:
我有一个包含 20 多列、4500 万行的表。我希望通过分区来汇总每个 Id 的信息,以便行数保持不变,并且每行都保留信息
select min(Distance) over(partition by Id) as min_distance
, max(Distance) over(partition by Id) as max_distance
, avg(Distance) over(partition by Id) as mean_distance
, stdev(Distance) over(partition by Id) as sd_distance
, sum(Distance) over(partition by Id) as sum_distance
, min(Speed) over(partition by Id) as min_speed
, max(Speed) over(partition by Id) as max_speed
, avg(Speed) over(partition by Id) as mean_speed
, stdev(Speed) over(partition by Id) as sd_speed
仅包含 10000 行的测试已运行 2 小时。我想知道我们是否可以做些什么来提高性能。
【问题讨论】:
-
获得更多硬件? 2 小时是惊人的长 - 我很想看看你使用什么作为 SQL Server 硬件并查看执行计划(你标记但没有给出 - 耻辱)。
-
无论如何,结束 - 这是一个非常具体的问题,属于数据库专家所在的 dba.stackexchange.com。
-
没有表定义(包括索引)这是不可能回答的。
标签: sql-server performance partitioning window-functions sql-execution-plan