Sql server “SELECT*FROM(SELECT…”是否创建临时表?

Sql server “SELECT*FROM(SELECT…”是否创建临时表?,sql-server,Sql Server,做一个 SELECT * FROM (SELECT foo.id, bar.name FROM foo LEFT JOIN bar ON bar.foo_id = foo.id) \--------------- Will this be a temp table? --------------------------/ 创建与在存储过程中使用does声明表相同类型的临时表?还是创建视图或其他魔法? 对临时表的快速搜索只显示它们在存储过程中使用。是的,但仅在内部使用

做一个

SELECT * FROM (SELECT foo.id, bar.name FROM foo LEFT JOIN bar ON bar.foo_id = foo.id)
              \--------------- Will this be a temp table? --------------------------/
创建与在存储过程中使用does声明表相同类型的临时表?还是创建视图或其他魔法?
对临时表的快速搜索只显示它们在存储过程中使用。

是的,但仅在内部使用


在整个查询执行后,您将无法访问它。

在您的示例中,外部查询不起任何作用。因此查询优化器将对其进行优化


您可以在查询执行计划中看到结果集的流程。例如,循环联接会生成一个包含结果行的临时结构。临时结构可以像临时表一样存储在tempdb中。但您看不到它,它将在查询完成后被解除分配。

Temp table w对于复杂的子查询,这显然会给内存带来一些压力,但与大多数事情一样,内存比磁盘快


您可以单独进行嵌套查询,使用磁盘上的临时表执行另一个查询,最终删除该表。

可能。如果有,它对您有什么帮助?如果没有,它对您有什么帮助?@Damien_the_Unbeliver:我有一个相当大的查询使用它,并想了解引擎盖下发生了什么。实际的ery有点复杂,实际上做的更多,因此使用这样一个简单的查询可能会很愚蠢,因为它将被优化:。我只是想知道括号内的部分是否会作为临时表处理。一种方法是检查查询执行计划。一些子查询可以逐行执行。这些子查询不会被重新处理需要任何临时存储。