我听说create table #tbname
或create table ##tbname
在临时数据库中创建了一个临时表。但是,以下查询是否在临时数据库中创建临时表?
Select * from
(select * from table1) as temp;
答案 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看到了你的子查询,并意识到它可以简化。
SQL是声明性语言,这意味着您要表达最终结果应该是什么,而不是SQL Server应该如何实现目标。
然后有查询提示和其他东西,它们会对优化程序如何生成查询计划产生影响。但这是另一个故事。