0

私は一緒に参加しているさまざまなテーブルを持っています。各テーブルにはプライマリ インデックスがあり、すべてではありませんがほとんどが日付フィールドでパーティション分割されています。各テーブルにはビューが関連付けられています。

フォームにクエリを書くと

select
*
from view1
join view2
on pi1 = pi2
join view3
on pi1 = pi3
join view4
on pi1 = pi4

...

スプール領域不足の問題が発生しました。テーブルを直接クエリした方がよいでしょうか? いくつかの中間テーブルを作成し、一度にいくつかの結合を行ってから、中間テーブルに新しいインデックスとパーティションを作成する方がよいでしょうか?

4

2 に答える 2

2

最初に、クエリの「Explain」出力を確認する必要があります。[Teradata SQL Assistant を使用している場合は、クエリを選択して F6 キーを押すと、クエリの実行方法に関する解析エンジン (PE) の計画が出力されます]。

Explain の出力には、多くの「再配布」[Teradata はクローゼットの社会主義者だと思います] が表示されると思われます。そうでない場合は、ビューを介して結合している各テーブルの PI が異なるため、再配布が必要になります。

一部の列で統計を収集する必要があるかどうかも確認する必要があります。不適切な統計により、PE がばかげたクエリ プランを作成する可能性があります。例: 結合しようとしているテーブルの 1 つが巨大であるが歪んだテーブルである場合、PE はそれが実際には小さなテーブルであると誤って検出し、(再配布ではなく) すべての AMPS に複製しようとする可能性があり、通常はこれが発生します。スペースが不足しています。

先に進んで、クエリの「説明」を投稿してみませんか? このオプションを最初に設定します。DIAGNOSTIC HELPSTATS ON FOR SESSION;

ビューが何をしているかを見なければ、それを判断するのは困難です。

于 2013-09-23T11:31:43.860 に答える