INリスト リライト - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLリクエストおよびトランザクション処理

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/arh1512079329802.ditamap
dita:ditavalPath
ja-JP/arh1512079329802.ditaval
dita:id
B035-1142
Product Category
Software
Teradata Vantage

INまたはNOT IN述部のINリスト内の値の数がDBS制御のINListRewriteThresholdフィールドの設定を超えると、INリスト リライト処理が適用可能かどうかについてINリストが確認されます。INリスト リライト処理に関連するDBS制御フィールドの詳細については、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。INリスト リライト処理では、INリスト値をスプールし、そのINリストをスプールを参照するサブクエリーに書き換えます。

CASE式ではないリストのINリスト クエリー リライト

次のクエリーを仮定します。
SELECT SUM(net_rev_amt)
FROM  prod_db.fxf_ship_rev_credit_comp  a
WHERE a.payor_cust_nbr IN ('14390630' ,'15449611','15454443',…);
INリストはCASE式ではないため、サブクエリー ベースのリライトが適用され、次のクエリーが作成されます。(最適化ルーチンは、INリスト リライトが適用された後で計画を結合します。)
SELECT SUM(prod_db.a.net_rev_amt ) 
FROM prod_db.fxf_ship_rev_credit_comp  a
WHERE a.payor_cust_nbr  IN (SELECT InListSpool_1.payor_cust_nbr FROM InListSpool_1);

CASE式のリストのINリスト クエリー リライト

次のクエリーを仮定します。
SELECT SUM(net_rev_amt)
FROM  prod_db.fxf_ship_rev_credit_comp  a
WHERE CASE WHEN a.payor_cust_nbr IN ('14390630' ,'15449611',...)
       THEN rev_shp_cnt  ELSE rev_pcs END > 120 ;
INリストはCASE式であるため、外部結合ベースのINリスト リライトが適用され、次のクエリーが生成されます。
SELECT SUM(prod_db.a.net_rev_amt ) 
FROM ship_rev a 
LEFT OUTER JOIN InListSpool_1 ON ( (a.payor_cust_nbr = InListSpool_1.payor_cust_nbr ) WHERE (( CASE WHEN (NOT (InListSpool_1.payor_cust_nbr IS NULL )) 
              THEN (a.rev_shp_cnt ) 
              ELSE (a.rev_pcs ) END ))>  120 ;