针对大型数据集优化 SQL Server 中的分页
向用户有效地呈现大型数据集需要分页——每页仅显示结果的一部分。 然而,在不影响性能的情况下实现分页至关重要,尤其是在需要事先计算总结果计数时。
旧版 SQL Server 版本 (2000-2008):行编号
在 SQL Server 2012 之前,行编号是标准分页技术。 这涉及使用 ROW_NUMBER()
分配行号并根据页面大小和数量进行过滤。虽然有效,但事实证明这种方法对于大量数据集效率低下。
SQL Server 2012 及更高版本:OFFSET
和 FETCH
SQL Server 2012 引入了高级 OFFSET
和 FETCH
子句。它们直接跳过指定数量的行并仅检索所需的子集。通过消除行编号的开销,这显着提高了大型数据集的性能。
示例性查询
以下查询演示了在 SQL Server 2012 及更高版本中使用 OFFSET
和 FETCH
检索初始 10 行和总行数:
<code class="language-sql">DECLARE @RowsPerPage INT = 10; WITH TotalResults AS ( SELECT COUNT(*) OVER() AS TotalRows FROM TableName ) SELECT * FROM TableName ORDER BY id OFFSET 0 ROWS FETCH NEXT @RowsPerPage ROWS ONLY; SELECT TotalRows FROM TotalResults;</code>
重要提示:
ORDER BY
和 OFFSET
时,FETCH
子句是强制性的。OFFSET
必须伴随FETCH
; 它们不能与 TOP
.OFFSET
和 FETCH
可以显着提高性能,尤其是在处理大量数据集时。以上是如何在保持性能的同时高效地对 SQL Server 中的大型数据集进行分页?的详细内容。更多信息请关注PHP中文网其他相关文章!