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