17.10 - 結合に対する動的行パーティション排除の効果 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-171K-JPN
Language
日本語 (日本)
以下の指針は、パーティション化されたテーブルに対する結合クエリーで動的行パーティション排除を最大限に活用するために適用します(動的行パーティション排除は複数レベルでパーティション化されたテーブルに対するマージ結合方式ではサポートされません。Teradata Vantage™ - データベースの設計、B035-1094およびTeradata Vantage™- SQLリクエストおよびトランザクション処理、B035-1142を参照)。
  • 動的行パーティション排除を利用すると、パーティション化されたテーブルのパーティション列セットに対する等価条件によって、パーティション化されたテーブルと別のテーブルを結合するときのパフォーマンスを向上できます。

    これは、包含プロダクト ジョインでは機能しません。その場合、最適化ルーチンはIN (subquery)結合条件の実行を指定します。

  • リクエストに応答する必要があるパーティションだけが、結合に含まれます。

    結合ステップを実行するとき、システムは、他のテーブルからの列の値に動的に基づいて、パーティション化されたテーブルの適格なパーティションを判別します。

    パーティション化されたテーブルのすべての行に対して積結合を実行する代わりに、最適化ルーチンは、他方のテーブル全体ではなく、1つのパーティションの行に対してのみ積結合を実行します。

    例えばパーティション化されたテーブルにパーティションが100個あり、結合リクエストに回答するために必要なパーティションは5個だけの場合、他の95個に対しては結合が実行されず、システムはその結合操作で95%のリソースを節約できます。

  • 結合列の統計は常に収集してください。

次のテーブル定義、EXPLAINリクエスト、およびEXPLAINレポートは、結合にかかわるテーブルの1つがPPIテーブルである場合に、動的行パーティション排除を利用すると結合操作がどのように効率化されるかを示す例です。

     CREATE SET TABLE DB.sales (    -- Defines total day sales
       prodid   INTEGER,            -- for each product
       saledate DATE FORMAT 'YYYY-MM-DD',
       amount   DECIMAL(10,2))
     PRIMARY INDEX (prodid, saledate)
     PARTITION BY RANGE_N(saledate BETWEEN DATE '2004-01-01'
                                   AND     DATE '2004-12-31'
                                   EACH INTERVAL '1' MONTH );

     CREATE SET TABLE DB.fiscal_month (    -- Defines the days in
       yr       SMALLINT NOT NULL,         -- in each fiscal month.
       mth      SMALLINT NOT NULL,         -- A fiscal month may
       dayofmth DATE NOT NULL)             -- partially span up
     PRIMARY INDEX (yr, mth);              -- to 2 calendar months.

例えば、2004年の会計月9月は、8月30日から9月26日、または28日です。

毎日、2 AMPシステムと10製品の販売を想定しています。

以下のSELECT文のEXPLAINには、プライマリ インデックス"DB.fiscal_month.yr = 2004, DB.fiscal_month.mth = 9"(この後に行キーでパーティション化するためのSORTが続く)を経由したDB.fiscal_monthからのRETRIEVEステップが含まれます。 次に、プロダクト ジョインを使用し、動的パーティション排除で強化した結合条件("DB.sales.saledate = dayofmth")を適用して、DB.salesのすべてのパーティションに対しJOINステップを実行します。

      SELECT yr, mth, SUM(amount)
             FROM DB.sales, DB.fiscal_month
             WHERE saledate = dayofmth
             AND   yr = 2004
             AND   mth = 9
             GROUP BY yr, mth;