使用“AS”关键字声明结果集是否会创建临时表?

时间:2014-04-25 05:35:26

标签: sql sql-server temp-tables

我听说create table #tbnamecreate table ##tbname在临时数据库中创建了一个临时表。但是,以下查询是否在临时数据库中创建临时表?

Select * from 
(select * from table1) as temp;

1 个答案:

答案 0 :(得分:2)

由于各种原因,某些查询会在tempdb中创建工作表。在示例中使用派生表不是其中之一。

如果您想仔细查看它的功能,可以使用set statistics io on并在SSMS中执行查询。

set statistics io on

select *
from (select * from T) as T

我的消息标签中的输出是。

  

表'T'。扫描计数1,逻辑读取3,物理读取0,预读   读取0,lob逻辑读取0,lob物理读取0,lob预读   读取0。

如果你在tempdb中的表中有任何活动,它会显示在那里。

你可以做的另一件事是看你的子查询是否真的改变了某些东西,看看查询计划,也许比较使用子查询的查询的查询计划和不查询的查询计划。 / p>

select *
from (select * from T) as T

select * from T

这些查询的结果相同,执行计划相同。 SQL Server看到了你的子查询,并意识到它可以简化。

enter image description here

SQL是声明性语言,这意味着您要表达最终结果应该是什么,而不是SQL Server应该如何实现目标。

然后有查询提示和其他东西,它们会对优化程序如何生成查询计划产生影响。但这是另一个故事。