針對大型資料集最佳化 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中文網其他相關文章!