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