你好,我一直有个疑问,如下操作:
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
那个更快呢?
其实完全可以自己测试下!
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
这两个语句的处理机制需要在不同数据量级下进行测试,你才能得到正确的结果,单纯的说哪个快一些是不正确的,需要结合实际的运行环境,典型的需要结合查询的数据量来做判断。如果你数据量小,那么这两个语句没有什么区别。