T-SQL中TOP和OFFSET - FETCH的高效使用及中位数计算方法
在T - SQL的实际应用中,我们经常会遇到各种复杂的查询需求,比如返回每组的前N条记录以及计算中位数等。本文将深入探讨这些问题的多种解决方案,并分析它们在不同场景下的效率。
1. 数据删除与TOP语句
在某些情况下,我们可能需要删除大量数据。可以使用无限循环结合 DELETE TOP 语句,每次删除最多3000行并提交。当受影响的行数少于3000时,说明到达了最后一批数据,代码会跳出循环。如果在运行过程中(尤其是高峰时段)需要中止该过程,这是安全的,只会回滚当前批次的数据。之后可以在合适的时间再次运行,过程会从上次中断的地方继续。
2. 每组前N条记录的查询任务
- 任务概述 :每组前N条记录的查询任务在实际应用中非常常见,例如返回每个证券的最新价格、每个地区处理订单最多的员工、每个客户的最近三个订单等。对于这类任务,没有一种解决方案在所有情况下都是最有效的,其效率主要取决于两个因素:支持索引的可用性和分区(分组)列的密度。
- 示例任务及元素分析 :以从
TSQLV3数据库的Sales.Orders表中返回每个客户的最近三个订单为例,需要确定三个元素:- 分区 :
custid,用于定义组。 - 排序 :
- 分区 :
超级会员免费看
订阅专栏 解锁全文
2899

被折叠的 条评论
为什么被折叠?



