sql-server-2005 - CTE 是否使用 tempdb 中的任何空间?

标签 sql-server-2005 sql-server-2008 common-table-expression tempdb

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/

相关文章:

algorithm - 如何轻松地将一个整数转换为两个整数并进行逆转换?

sql - 如何与 "row_number() over (partition by [Col] order by [Col])"相反

SQL在内部连接中间使用嵌套选择

sql - 我可以用 View (同名)替换表吗?

sql-server - 复杂的 TSQL 合并

c# - SqlBulkCopy 到 Sql Server 2008 中的临时表

sql - 如何优化繁忙表的索引?

sql - 有什么方法可以在 SQL Server CTE 中的 WITH 子句之上进行选择吗?

sql - 在单独的 CTE 中调用具有不同参数的多语句 TVF 显示错误结果

带有两个表的 SQL 递归 CTE