1

做一个

SELECT * FROM (SELECT foo.id, bar.name FROM foo LEFT JOIN bar ON bar.foo_id = foo.id)
              \--------------- Will this be a temp table? --------------------------/

创建与在存储过程中使用# 声明表相同类型的临时表?还是它创建了一个视图或其他一些魔法?对临时表的快速搜索只显示它们在存储过程中使用。

4

3 回答 3

1

确实如此,但仅限于内部。

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

于 2012-09-19T08:27:00.017 回答
1

临时表将在内存中创建,然后如前所述,丢失。对于复杂的子查询,这显然会给内存带来一些压力,但与大多数事情一样,内存比磁盘快。

您可以将嵌套查询作为单个查询进行,使用临时表(在磁盘上)然后执行另一个查询,最终删除该表。

于 2012-09-19T08:34:25.450 回答
0

在您的示例中,外部查询什么也不做。所以查询优化器会将它优化掉。

您可以在查询执行计划中看到结果集的流向。例如,aloop join会产生一个包含结果行的临时结构。临时结构可以像临时表一样存储在 tempdb 中。但它不会对您可见,并且会在查询完成后被释放。

于 2012-09-19T08:31:07.857 回答