在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中文網其他相關文章!