性能可以是一個棘手的問題,因爲有一個龐大的數字可能影響它的因素。在找到性能最好的方法之前,通常會嘗試多種方法來實現相同的目標。
這些表是SAS表還是一個或兩個第三方DBMS表?這打開了整個世界的性能問題,我將離開,直到確認。
假設他們都是SAS表,如果你只想從表B中獲得列,假設他們都是SAS表,假設& Score_Column在表B中。如果不是,那麼這將不起作用。
proc sql;
create table с as
select distinct b.REP_CLID, b.REP_DATE, &Score_Column, b.REP_AGE as AGE
from &b (IDXWHERE =Yes) as b
where b.rep_clid in
( select a.rep_clid
from a (IDXWHERE =Yes)
)
;
Quit;
或者,您可以使用proc格式,如建議。如果& Score_Column在表格a中,但是如果不是,則可以很容易地修改該示例。
Proc sql;
create table rep_clid_fmt as
select distinct 'rep_clid_fmt' as fmtname
, rep_clid as start
/* If &Score_Column is in table a then use &Score_Column as the label */
, &Score_Column as label
else use a flag like...
, 'keep' as label
from a
;
Quit;
Proc format cntlin=rep_clid_fmt;
Run;
proc sql;
create table с as
select distinct b.REP_CLID
, b.REP_DATE
, put (b.REP_DATE,rep_clid_fmt) as &Score_Column
, b.REP_AGE as AGE
from &b (IDXWHERE =Yes) as b
where put (b.REP_DATE,rep_clid_fmt) ne substr (b.REP_DATE,1,length(put(b.REP_DATE,rep_clid_fmt))
;
Quit;
祝你好運!
在你的數據庫中,你有IDXWHERE上的索引嗎?尤其是b表。 – Mihai 2014-10-28 08:54:57
是的,我有。使用索引查詢大約42分鐘,沒有他們 - 51分鐘。 – user3306125 2014-10-28 09:00:55
我猜rep_clid是主鍵,你真的需要清楚嗎? – Mihai 2014-10-28 09:04:06