Teradataは単一テーブルから全件返すときもスプールを使う
Teradataで3000万件ぐらいのテーブルをただ全件引いてみると、
select * from t /* 3000万件 */
しばらくだんまりになった後で、猛然と結果が返ってくる。
このだんまりの時間に何をしているのかexplainで調べてみると、
3) We do an all-AMPs RETRIEVE step from TST.t by way of an all-rows
scan with no residual conditions into Spool 1 (group_amps), which
is built locally on the AMPs.
何と全件スプールに書き写している。
ここでテーブルを丸ごと転記する意味は何なのだろう?
TeradataはI/Oがあまりにも速いので(数100万件のテーブルから数件を選択するクエリなら、インデックス使ってるのかテーブルスキャンしてるのか、人間には区別が付かない)、この特性のために困ったことは一度もないのだが、スプールを使う理由と、もしあれば回避策が知りたい。