CTE 使用 tempdb 中的任何空间还是专门使用内存?
我用 mssql 2005 和 2008 标记了这个问题,因为我同时使用这两个。
最佳答案
我会尽量不复制/粘贴 MSDN
没关系。
CTE 独立于查询执行:它只是一种语言结构。将其视为整洁的派生表或子查询。
这意味着除了递归 CTE(见下文),全部 CTE 可以内联编码。如果您使用一次 CTE 代码,它是为了可读性。如果您使用 CTE 两次或更多次,那么它是防御性的:您不想犯错误并且每次使用都不同的派生表。
如果 CTE 被使用两次或更多次,那么该代码将被执行两次或更多次。它不会被执行一次并缓存在 tempdb 中。
总结:可能会也可能不会,就像代码是内联的一样。
注意:递归 CTE 只是派生表内派生表内派生表内派生表内派生表内的派生表......所以同样适用。
你可以在 Tony Rogerson's article 中看到这个.如果内联编码,无论如何都会使用 tempdb。他还指出,由于我上面解释的“宏”扩展,使用临时表会更好
仅供引用:这同样适用于 View 。只是宏。
关于sql-server-2005 - CTE 是否使用 tempdb 中的任何空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801924/