在SQL Server 中選擇行
提供的查詢無法傳回超過7374 行,因為它耗盡了sys.path 中的行數。列表。為了克服這個限制,更有效的方法是使用級聯 CTE 產生「計數表」或「數字表」。
這是使用級聯 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
這種方法非常高效,因為它產生零讀取並擴展到極大數量的行。有關效能比較和計數表的更多信息,請參閱回應中提供的連結資源。
以上是如何在SQL Server中有效率地選擇大量行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!