做一个
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声明表?或者它是创造一个视图还是其他一些魔术? 快速搜索临时表仅显示它们在存储过程中使用。
答案 0 :(得分:1)
它确实是,但仅在内部。
执行整个查询后,您将无法访问它。
答案 1 :(得分:1)
临时表将在内存中创建然后如所述,丢失。对于复杂的子查询,这显然会给内存带来一些压力,但与大多数情况一样,内存比磁盘快。
您可以使用临时表(在磁盘上)执行嵌套查询,然后执行另一个查询,最终删除表。
答案 2 :(得分:0)
在您的示例中,外部查询不执行任何操作。因此查询优化器将对其进行优化。
您可以在查询执行计划中查看结果集的流程。例如,loop join
会生成包含结果行的临时结构。临时结构可以像临时表一样存储在tempdb中。但是它不会被您看到,并且在查询完成后将被取消分配。