首頁 > 資料庫 > mysql教程 > 如何在 SQL Server 中有效地選擇特定範圍的行,尤其是在處理大型資料集時?

如何在 SQL Server 中有效地選擇特定範圍的行,尤其是在處理大型資料集時?

Barbara Streisand
發布: 2025-01-01 09:07:10
原創
876 人瀏覽過

How Can I Efficiently Select a Specific Range of Rows in SQL Server, Especially When Dealing with Large Datasets?

在SQL Server 中選擇行範圍:管理行計數限制

SQL Server 中的一個常見要求是選擇特定範圍的行從一張桌子上。這可以透過 çeşitli 方法來實現,每種方法都有其自身的限制和效能考量。

sys.all_columns 中的有限行計數

一種技術涉及使用 ROW_NUMBER() 和CTE 用於產生指定範圍內的行列表。然而,這種方法在應用於大型表時面臨限制,特別是對於超過 7374 行的範圍。這是因為底層 sys.all_columns 表的行數量有限。

產生行範圍的替代方法

要克服此限制,需要使用另一種方​​法利用級聯 CTE 來建立「計數表」。此方法產生指定範圍內的數字清單。以下是範例:

DECLARE @Range AS INT = 7374

;WITH E1(N) AS( -- 10 ^ 1 = 10 rows
    SELECT 1 FROM(VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))t(N)
),
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), -- 10 ^ 2 = 100 rows
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), -- 10 ^ 4 = 10,000 rows
E8(N) AS(SELECT 1 FROM E4 a CROSS JOIN E4 b), -- 10 ^ 8 = 10,000,000 rows
CteTally(N) AS(
    SELECT TOP(@Range) ROW_NUMBER() OVER(ORDER BY(SELECT NULL))
    FROM E8
)
SELECT * FROM CteTally
登入後複製

此方法建立一個達到指定 @Range 的統計表,提供更有效的方式來產生一定範圍的行。

效能注意事項

不同的統計表產生方法的效能會因具體需求和資料庫環境而異。如需全面的效能比較,請參閱外部資源,例如 Jeff Moden 的文章和其他研究。

摘要

在 SQL Server 中選擇一系列行是常見的操作使用各種可用技術來完成任務。了解每種方法的限制和效能注意事項可以為特定場景選擇最有效的方法。這裡介紹的級聯 CTE 方法提供了一種可靠且可擴展的方法來產生最多行數的統計表,克服了其他方法中遇到的限制。

以上是如何在 SQL Server 中有效地選擇特定範圍的行,尤其是在處理大型資料集時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板