在sas proc sql中的where where工作,同时连接到其他一些数据库

时间:2013-08-21 09:25:27

标签: sql sas sybase

我正在制作一张有超过3000万条记录的桌子。这张桌子在sybase上,我正在研究sas。有一个feed_key(数字)变量,其中包含记录条目的时间戳。我想拉出特定时间段的记录。

proc sql ;
Connect To Sybase (user="id" pass="password" server=concho);
create table table1 as
select * from connection to sybase
(
select a.feed_key as feed_key,
              a.cm15,
              a.country_cd,
              a.se10,
              convert(char(10),a.se10) as se_num,
              a.trans_dt,
              a.appr_deny_cd,
              a.approval_cd,
              a.amount        
         from abc.xyz a
  where a.country_cd in ('ABC') and a.appr_deny_cd in ('0','1','6') and a.approval_cd not in ('123456') and feed_key > 12862298
);
disconnect from sybase;
quit;
不管我是否输入了feed_key条件,它都会拉出相同的记录,并且执行时间差异很大(16分钟没有feek_key条件,15分钟有feed_key条件)查询。

请澄清本案中where子句的工作。

因为我认为feed_key条件应该使查询运行得更快,因为超过80%的记录与此条件不匹配....

1 个答案:

答案 0 :(得分:0)

如果您获得相同数量的记录,则处理查询所需的时间相同。

这是因为I / O(将数据传输回SAS并存储它)是操作中最耗时的部分。这就是缺乏指数不会对总时间产生重大影响的原因。

如果您调整查询以使其返回的行数较少,则可以加快处理速度。

您可以通过查看SAS日志来判断是否存在这种情况,该日志将显示CPU使用了多长时间(其余为IO):

    NOTE: PROCEDURE SQL used (Total process time):
          real time           11.07 seconds
          cpu time            1.67 seconds