Teradata SQLパフォーマンス改善Tips(1) - PIを使って結合する
Teradataは、Primary Index(PI)を結合カラムにしたときに結合が最速になる、とマニュアルに書いてある。
以下はこの性質を使ってパフォーマンス改善した事例。
夜間バッチの時間短縮のため、時間のかかっているジョブをチェックしてみると、こんな結合条件のSQLが見つかった。
insert into ... select ... from t1 /* (col1, col2) が Primary Index */ left outer join t2 on t1.col1 = t2.col1 and substr(t.col2, 1, 4) = t2.col2 and substr(t.col2, 5, 4) = t2.col3
Primary Index の一部であるcol2をsubstr()で分解しているため、PIを使ったmerge joinができず、t1, t2ともに再配置されていた。
結合条件を以下のように書き換えると、t1の再配置が抑止され、またt1のPIが結合に使用されるようになり、実行時間が1/8になった。
left outer join t2 on t1.col1 = t2.col1 and t1.col2 = t2.col2 || t2.col3