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-1144-171K-JPN
Language
日本語 (日本)

次の例は、結合インデックス定義内の追加テーブルの一般的なカバーのルールに対する例外の例です。Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184のCREATE JOIN INDEXを参照してください。

次の例では、テーブルt9はテーブルt7とt8の親テーブルです。一般的には、この関係によって、結合インデックスはインデックスの定義が参照するよりも少ない数のテーブルを参照する問合わせをカバーすることに関して不適格となります。しかし、次に示すように、結合インデックス定義のFK列(y7 = x8)に基づきt7とt8が結合されているため、最適化ルーチンではこのインデックスのjiを問合わせのカバーに使用します。

    CREATE SET TABLE t7(
     x7 INTEGER NOT NULL, 
     y7 INTEGER NOT NULL, 
     z7 INTEGER NOT NULL, 
    CONSTRAINT r7 FOREIGN KEY (y7) REFERENCES WITH NO CHECK OPTION 
               t9 (y9))
    PRIMARY INDEX (x7);
    CREATE SET TABLE t8(
     x8 INTEGER NOT NULL, 
     y8 INTEGER NOT NULL, 
     z8 INTEGER NOT NULL, 
    CONSTRAINT r8 FOREIGN KEY (x8) REFERENCES WITH NO CHECK OPTION 
               t9 (x9));
    CREATE SET TABLE t9(
     x9 INTEGER NOT NULL UNIQUE, 
     y9 INTEGER NOT NULL, 
     z9 INTEGER NOT NULL) 
    UNIQUE PRIMARY INDEX(y9);
    CREATE JOIN INDEX ji AS 
     SELECT x7, y7, x8, y8, x9, y9 
     FROM t7, t8, t9 
     WHERE y7=x8 
     AND   y7=y9 
     AND   x8=x9;

SELECT文のEXPLAINには、("ji.x1 > 1")という条件を使用したjiからの取得ステップが含まれます。

    SELECT x7, y7, x8, y8 
    FROM t7, t8 
    WHERE y7=x8 
    AND   x7>1;

前の例と同様に、この例では結合インデックス定義内の1つのテーブルが他の2つのテーブルの親であり、それらのテーブルが外部キーとプライマリ キーの関係で結合される場合に、結合インデックスを使用して問合わせをカバーする方法を示しています。t9はt7とt10の両方の親テーブルです。ただし、t7とt10は推移的閉包により、同一のPK列に基づいてt9と結合されているため、t7とt10はy7=x10に基づいて結合されます。最適化ルーチンでは、次に示すように、結合インデックスのjiを使用して問合わせをカバーできます。

    CREATE SET TABLE t10(
     x10 INTEGER NOT NULL, 
     y10 INTEGER NOT NULL, 
     z10 INTEGER NOT NULL, 
    CONSTRAINT r10 FOREIGN KEY (x10) REFERENCES WITH NO CHECK OPTION 
               t9 (y9))
    PRIMARY INDEX x10;
    CREATE JOIN INDEX ji AS 
     SELECT x7, y7, x10, y10, x9, y9 
     FROM t7, t10, t9 
     WHERE y7=y9 
     AND   x10=y9;

SELECT文のEXPLAINには、("ji.x1 > 1")という条件を使用したjiからの取得ステップ)が含まれます。

    SELECT x7, y7, x10, y10 
    FROM t7, t10 
    WHERE y7=x10 
    AND   x7>1;