私は 3,000 万件を超えるレコードを持つテーブルに取り組んでいます。テーブルは sybase にあり、sas に取り組んでいます。レコード エントリのタイム スタンプを含む feed_key(numeric) 変数があります。特定の時間枠のレコードを取得したいと考えていました。
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 条件を設定するかどうかに関係なく、同じ数のレコードを取得しており、クエリの実行にほぼ同じ時間 (feek_key 条件なしで 16 分、feed_key 条件ありで 15 分) を要しています。
この場合のwhere句の働きを明確にしてください。
レコードの 80% 以上がこの条件に一致しないため、feed_key 条件によりクエリの実行がはるかに高速になるはずだったと思います....