我正在制作一张有超过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%的记录与此条件不匹配....
答案 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