Teradata Databaseでは、UNION ALLセット演算子を含むクエリーについて以下のように最適化戦略を採用することになりました。
- コストなどの要因に基づいて外部ブロックからの集約および結合をUNION ALLブランチにプッシュする。
- プッシュされた集約および結合はマルチソース操作として評価する(該当する場合)。
- UNION ALLスプールのデモグラフィックをスマートに構築し正確に導出する。
- パーティション式を制約として使用し、条件を満たさないUNION ALLブランチを排除する。
利点
この機能は、集約および結合がUNION ALLブランチにプッシュされる場合に、UNION ALLスプールのサイズを減らすことで、UNION ALLセット演算子を含むクエリーのパフォーマンスを向上させます。UNION ALLブランチへの集約および結合のプッシュはまた、より多くの計画の選択肢とより良い全体的なパフォーマンスを最適化ルーチンに提供します。
例えば、これらの最適化は、1つのテーブルで履歴データが保持されていて、アクティブにアクセスされる別のテーブルで現在のデータが保持される場合に便利です。一部のクエリーについて、履歴データ、または現在と履歴の両方のデータにアクセスする必要がある場合、ユーザーは、2つのテーブルのUNIONALLのビューを使用して1つのテーブルであるかのように2つのテーブルにアクセスできます。UNION ALLの最適化では、分割の制約、CHECK制約、およびクエリー条件に基づいて、一方またはもう一方のテーブルへのアクセスを制限できます。または、両方のテーブルにアクセスする必要があり、一方のテーブルまたは集約との結合を使用する場合は、パフォーマンスを向上できます。ユーザーは、アクセスするテーブルがどちらなのか、または両方のテーブルにアクセスするのかについて考える必要はなくなります。
考慮事項
UNION ALLを使用するときは、次の考慮事項に注意してください。
- UNION ALLビューと派生テーブルには、MINUS、INTERSECT、またはUNION DISTINCTなどのその他の集合演算子を含めないでください。
- 集約、DISTINCT、統計関数、サンプリング、拡張、および正規化を使用するUNION ALL SELECTブランチは、これらの最適化の対象外になります。
- 集計および結合は、常にUNION ALLブランチにプッシュされるわけではありません。これは特に、他の計画で低い見積もりコストがある場合、または集約および結合をプッシュする計画が、その複雑さ、または解析時間の増加を避けるため最適化ルーチンによって考慮されていない場合に当てはまります。
- 最適化ルーチンで検討すべきオプションが多くなる結果として、解析時間がわずかに増加する可能性があります。
- コスト ベースの最適化について、この機能を最大限に活用するには該当する統計情報を収集する必要があります。
追加情報
UNION ALLの最適化の詳細については、<Teradata Vantage™ SQLリクエストおよびトランザクション処理、B035-1142>を参照してください。