このリリースでは、Teradata Database最適化ルーチンに対する大幅な機能拡張があります。
UNION ALLビューまたは派生テーブルに対するTOP nクエリーのパフォーマンスが向上
このリリースより前は、UNION ALLビュー(または派生テーブル)に対してTOP nを使用したクエリーでは、最適化ルーチンは最初にすべてのブランチを共通のスプールに実体化し、次に共通のスプールに対してTOP N操作を適用しました。この機能拡張により、最適化ルーチンは、順不同のTOP nをUNION ALLにプッシュできます。そのようにして、一部のブランチまたはすべてのブランチをスプールするコストを回避します。
クエリーのEXPLAINを生成する場合、Teradata Databaseがn行を取得するまで各ブランチを条件付きで処理する手順が出力に示されます。
この機能拡張は次のものには影響しません。
- TOP n%クエリー
- ORDER BY句を含むTOP nクエリー
- 集約関数または統計関数がUNION ALLビューまたは派生テーブルに適用されている場合のTOP nクエリー
結合インデックスおよび集約結合インデックスの最適化の向上により、より多くのクエリー シナリオで結合インデックスを使用可能
クエリー リライトおよび最適化処理に対する次の機能拡張では、結合インデックス(JI)と集約結合インデックス(AJI)を使用してより多くの種類のクエリーを処理することにより、クエリーのパフォーマンスを向上させることができます。
- SUM式の引数にそのSUMのAJIとは異なるCASTが適用されている場合(または、AJIが引数に対してCASTをまったく適用していない場合)、AJIのデータ型をクエリーCASTで指定されたデータ型に変換するときに精度が失われていなければ、最適化ルーチンはクエリー処理中に引き続きAJIを使用できます。
- SUM(a)とSUM(b)を含む適切なAJIの場合、最適化ルーチンはフォームの式を含むクエリーを書き換えるようになりました。
SUM(a + b)
を次のクエリーに書き換えます。
SUM(AJI.a) + SUM(AJI.b)
- 結合インデックスは、外部結合の外側のテーブルを部分的にカバーできるようになりました。以前は、ON句の結合条件が結合インデックスで完全にカバーされていない場合、結合インデックスはクエリーを部分的にカバーできませんでした。
- SUM(a)を含むAJIでは、最適化ルーチンは、次のフォームを持つクエリーを書き換えます。
SUM(a * constant)
を次のクエリーに書き換えます。
SUM(AJI.a) * constant
また、最適化ルーチンは、次のフォームを持つクエリー
SUM(a*b)
を次のクエリーに書き換えます。
SUM(AJI.a)*b
ここで、bは、UPIまたはUSI上でAJIのグループ キーに結合されたテーブルから取られます。
- 結合インデックスは、EXISTSサブクエリーに関連付けられたテーブルを部分的にカバーするために、最適化ルーチンで使用できるようになりました。
より大規模なリクエスト キャッシュ
リクエスト キャッシュのサイズは、250 GB以上のメモリを持つ制御ノードを備えたシステムで増加し、処理できるリクエスト キャッシュ エントリの数が増えました。リクエスト キャッシュ エントリの数が増加することによって、キャッシュされた計画はメモリ上にとどまり、キャッシュされた計画を利用するためコード化されているリクエストに対する処理時間が向上します。