私は2つのテーブルを結合し、それらの間にミニデカルト結合を作成して、都市と州内のすべてのビジネスが一致するようにしてから、ファジー論理を使用してビジネス名とストリート名を試します。入力テーブルには約3百万件のレコードがあり、出力テーブルには2,500万レコードがあるため、実行には非常に時間がかかります。私は、結合されているすべての列とwhereステートメントで使用されているすべての列に対して索引を作成しました。SAS proc sql
私の次の考えは、都市名/州名を整数に置き換えることでしたが、これらのテーブルを作成する処理時間を追加することになりました。誰も処理時間を減らすために他の考えを持っていますか?
proc sql;
create index output_stname on tbl._output (output_stname);
create index output_namevar on tbl._output (output_namevar);
create index key on tbl._output (key);
create index city on tbl._output (city);
create index state on tbl._output (state);
create index input_stname on tbl._input (input_stname);
create index input_namevar on tbl._input (input_namevar);
create index key_input on tbl._input (key_input);
create index city_input on tbl._input (city_input);
create index state_input on tbl._input (state_input);
;
quit;
proc sql;
create table tbl._level2 as
select distinct
key_input,
name_input,
address_input,
city_input,
state_input,
zip_input,
key,
business_nm1,
address,
city,
state,
zip,
'2 - Street Name & Business Name Match' as matchtype
from tbl._input a
left join tbl._output b on a.city_input=b.city and a.state_input=b.state
where
compged(a.input_stname,b.output_stname) <= 50 and
compged(input_namevar,output_namevar) <= 50
and case
when length(strip(a.input_namevar)) <= 2 then 1
when length(strip(b.output_namevar)) <= 2 then 1
else 0
end = 0
;
quit;
データは市区町村ごとにソートされていますか?そうでなければ、索引はおそらくあなたを大いに助けていないでしょう(そしてあなたのシステムとデータに依存して実際に傷つけるかもしれません)。 – Joe
そうではありません。提案していただきありがとうございます。私はテーブルを並べ替え、複合インデックスを作成して、それがまったく役立つかどうかを見ていきます。 – Phil