17.05 - 例: MINおよびMAX関数を使用した集約結合インデックスの作成 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語 (日本)

この例では、基本テーブルのcustomerorder_tblの結合結果に対して定義されたMINおよびMAX関数を使用する、単純な集約結合インデックスを示します。

     CREATE TABLE customer (
       c_custkey    INTEGER not null,
       c_name       CHARACTER(26) CASESPECIFIC NOT NULL,
       c_address    VARCHAR(41),
       c_nationkey  INTEGER,
       c_phone      CHARACTER(16),
       c_acctbal    DECIMAL(13,2),
       c_mktsegment CHARACTER(21),
       c_comment    VARCHAR(127))
     UNIQUE PRIMARY INDEX( c_custkey );
     CREATE TABLE order_tbl (
       o_orderkey      INTEGER NOT NULL,
       o_custkey       INTEGER,
       o_orderstatus   CHARACTER(1) CASESPECIFIC,       
       o_totalprice    DECIMAL(13,2) NOT NULL,
       o_orderdate     DATE FORMAT 'yyyy-mm-dd' NOT NULL,
       o_orderpriority CHARACTER(21),
       o_clerk         CHARACTER(16),
       o_shippriority  INTEGER,
       o_comment       VARCHAR(79))
     UNIQUE PRIMARY INDEX(o_orderkey);

MINおよびMAX関数を使用して、order_tblcustomerに対する集約結合インデックスord_cust_idxを定義します。

     CREATE JOIN INDEX ord_cust_idx AS
       SELECT  c_nationkey, o_orderdate, MIN(o_totalprice) AS min_price,
               MAX(o_totalprice) AS max_price
       FROM    order_tbl, customer 
       WHERE   o_custkey = c_custkey 
       GROUP   BY c_nationkey,o_orderdate
       ORDER   BY o_orderdate;

以下のクエリーは、最適化ルーチンがどのようにクエリーを書き換え、ord_cust_idxを使用して基本テーブルを置き換えるようにするかを示す例として提供されます。SUM step句は、集約式を表わします。この例では、c_nationkey列をグループ化して、集約結合インデックスに対しMIN集約を実行します。SELECT文のEXPLAINには、条件( "(ord_cust_idx.O_ORDERDATE > DATE '1998-09-20') AND (ord_cust_idx.O_ORDERDATE < DATE '1998-10-15')")で結合インデックス テーブルord_cust_idxから集約するSUMステップが含まれます。

     SELECT COUNT(*), MIN(o_totalprice) 
             FROM order_tbl, customer 
             WHERE o_custkey = c_custkey 
             AND o_orderdate > DATE ‘1998-09-20’ 
             AND o_orderdate < DATE ‘1998-10-15’ 
             GROUP BY c_nationkey;