首页 新闻 搜索 专区 学院

关于将查询另起表名,sql server的实际处理机制疑问

0
悬赏园豆:10 [待解决问题]

你好,我一直有个疑问,如下操作:
select * from (select * from table)b
以上语句 sql server的是怎么处理的么?
我的猜想是,数据库新建临时表b 然后将table的数据插入其中;不知道是否正确?
再有一个例子
例子1
select sum(qty) from (
select qty from table1
union all
select qty from table2
)a
例子2
select sum(qty) from (
select sum(qty) as 'qty' from table1
union all
select sum(qty) from table2
)a
以上2个例子,是不是例子2的效率会高点?,如果是,为什么?如果不是,为什么?

又或者如下

例子1
select top 100 name from (
select name from table1
union all
select name from table2
)a
例子2
select top 100 name from (
select top 100 name from table1
union all
select top 100 name from table2
)a

那个更快呢?

sadkilo的主页 sadkilo | 初学一级 | 园豆:192
提问于:2014-01-10 19:31
< >
分享
所有回答(2)
0

其实完全可以自己测试下!

set statistics profile on
set statistics io on
set statistics time on
go
你的查询语句,里面都能看到的各种耗时!
go
set statistics profile off
set statistics io off
set statistics time off

贫民窟大侠 | 园豆:4272 (老鸟四级) | 2014-01-13 11:02
0

这两个语句的处理机制需要在不同数据量级下进行测试,你才能得到正确的结果,单纯的说哪个快一些是不正确的,需要结合实际的运行环境,典型的需要结合查询的数据量来做判断。如果你数据量小,那么这两个语句没有什么区别。

bitbug | 园豆:470 (菜鸟二级) | 2014-01-13 15:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册