一个sql提问,引起的研究。关于union all 中,嵌套查询和直接查询的效率比较。

  今天在CSDN的SQL server 版块里面碰见一个sql提问,就是:

 

    有三个表 table2008,table2009,table2010
    其中table2008这个表存的是08年的数据,table2009这个表存的是09年的数据,table2010这个表存的是10年的数据
    三个表的表字段名都一样 其中有内容字段 content, 开始时间 start_time,结束时间 end_time 等等,
    求大家帮写条语名查找出从08年某个时间段到10年某个时间段 内容字段 content相同的数据

  ”

  在所有各位大大给的答案中,主要有两种方法解决。如下:

   SELECT * FROM
   (
      SELECT * FROM TABLE2008
      UNION ALL
      SELECT * FROM TABLE2009
      ....
   )AS T WHERE 条件

 或者

    SELECT * FROM TABLE2008 WHERE 条件
    UNION ALL
    SELECT * FROM TABLE2009 WHERE 条件
    ....

现在我们来研究一下到底哪中方法的效率要高些呢?或者两者一样?...

我们先把这个题目放下,看我下面的测试数据,条件就不要时间了,我只要Id即可,每个表中1000000条测试:

   if OBJECT_ID('table2008') is not null drop table table2008
     go
   select top 1000000 id=identity(int,1,1) into table2008
   from syscolumns a,syscolumns b,syscolumns c,syscolumns d
    go

  if OBJECT_ID('table2009') is not null drop table table2009
   go
  select top 1000000 id=identity(int,1,1) into table2009
     from syscolumns a,syscolumns b,syscolumns c,syscolumns d
   go

  if OBJECT_ID('table2010') is not null drop table table2010
   go
  select top 1000000 id=identity(int,1,1) into table2010
    from syscolumns a,syscolumns b,syscolumns c,syscolumns d
   go

 

我测试的sql脚本为一下,测试结构也在下面

 select * from
(
select * from table2008
union all
select * from table2009
union all
select * from table2010
) t where id >=800000 

--所需时间【00:01:32】    条件:【id >=1】,没有加聚集索引
--所需时间【00:01:24】    条件:【id >=50000】,    没有加聚集索引
--所需时间【00:00:44】    条件:【id >=500000】,   没有加聚集索引

--所需时间【00:00:42】    条件:【id >=500000】,   加了聚集索引
--所需时间【00:00:17】    条件:【id >=800000】,   加了聚集索引

go
select * from table2008 where id >=800000
union all
select * from table2009 where id >=800000
union all
select * from table2010 where id >=800000
--所需时间【00:01:27】    条件:【id >=1】,        没有加聚集索引
--所需时间【00:01:17】    条件:【id >=50000】,    没有加聚集索引
--所需时间【00:00:42】    条件:【id >=500000】,   没有加聚集索引

--所需时间【00:00:42】    条件:【id >=500000】,   加了聚集索引
--所需时间【00:00:17】    条件:【id >=800000】,   加了聚集索引

 

结论:[自己电脑测试]

没有加索引的时候第二种的需要时间要少些,即是第二种的方法好些。

加了索引的时候,两种方法所需的时间一样,即两种方法一样。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值