SQL 数据处理与优化技巧
1. TOP 和 OFFSET - FETCH 的运用
在 SQL 中,TOP 和 OFFSET - FETCH 过滤器是非常实用的工具。下面展示了一个使用 OFFSET - FETCH 和 APPLY 来计算中位数的示例代码:
WITH C AS
(
SELECT grp,
COUNT(*) AS cnt,
(COUNT(*) - 1) / 2 AS ov,
2 - COUNT(*) % 2 AS fv
FROM dbo.T1
GROUP BY grp
)
SELECT grp, AVG(1. * val) AS median
FROM C
CROSS APPLY ( SELECT O.val
FROM dbo.T1 AS O
where O.grp = C.grp
order by O.val
OFFSET C.ov ROWS FETCH NEXT C.fv ROWS ONLY ) AS A
GROUP BY grp;
这个解决方案的执行计划具有三个优势:
- 高效利用并行性。
- 索引扫描次数为 1.5 次,而非 2 次。由于数据分组密集,查找成本可忽略不计。
- 执行计划中没有合并连接。在处理 1000 万行数据时,该解决方案仅需 1 秒即可完成,性能十分出色。
在使用 TOP 和 OFFSET - FETCH 时,在排序列上创建索引对于获得良好性能至关重要
超级会员免费看
订阅专栏 解锁全文
1617

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



