引言
辅助数字表可以提高某些SQL查询的效率。这些表可以是固定大小的,也可以是动态生成的。本文重点介绍如何创建一个用于动态生成数字列表的最佳用户自定义函数。
为什么递归CTE不是最佳选择
流行的递归CTE方法虽然可以“相当高效”地生成数字,但对于大型且频繁使用的列表来说,它实际上并非最佳选择。性能测试表明,与其他方法相比,它的持续时间、CPU使用率和内存压力都较高。
最佳方法:传统的交叉连接表
对于大型数字列表,传统的交叉连接表方法始终优于其他技术。它可以单次通过生成列表,并且内存开销最小。
SELECT TOP (1000000) ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS N INTO #Tally3 FROM Master.sys.All_Columns ac1 CROSS JOIN Master.sys.ALL_Columns ac2;
永久计数表的好处
虽然创建永久计数表需要预先考虑,但如果频繁使用该列表,它可以提供最佳性能。通过适当调整表的大小,可以将其缓存以获得最佳性能,而不会影响内存。
结论
选择创建数字列表的正确方法取决于具体的用法模式。对于大型且频繁使用的列表,传统的交叉连接表方法可提供最佳性能。对于一次性或较少使用的列表,建议创建永久计数表。
以上是如何创建最有效的用户定义函数来在 SQL 中生成数字列表?的详细内容。更多信息请关注PHP中文网其他相关文章!