2016-05-18 9 views
0

私は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; 
+0

データは市区町村ごとにソートされていますか?そうでなければ、索引はおそらくあなたを大いに助けていないでしょう(そしてあなたのシステムとデータに依存して実際に傷つけるかもしれません)。 – Joe

+0

そうではありません。提案していただきありがとうございます。私はテーブルを並べ替え、複合インデックスを作成して、それがまったく役立つかどうかを見ていきます。 – Phil

答えて

0

私は、出力テーブルの上に複合インデックスで始まります:

proc sql; 
    create index output_stname on tbl._output (state, city, output_stname, output_namevar); 

これは、加入短縮すべきです。しかし、select distinctはまだ疑わしいです。通常、select distinctを使用する必要はありません。

0

これをSQLで処理しないことをお勧めします。 SQLオプティマイザはCOMPGEDステートメントとCASEステートメントのためにこれを実際に最適化することはできません。 COMPGEDは非常に高価です。そういうわけで、あなたはどんなイベントでも非常に遅いプロセスを取るでしょう。

ほとんどの場合、ハッシュソリューションが最適です。データを見ずに言うのは難しいです(たとえば、いくつの都市/州のペアがありますか?巨大な数がありますか、比較的少数ですか)。しかし、出力テーブルをハッシュに合わせる(または、入力テーブルをハッシュに合わせる)ことができると仮定して、インデックス作成ステップを避けるため、ハッシュ解法が高速になる可能性があります。