単一パーティション スキャンおよびBEGIN/END範囲関数 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/uqf1592445067244.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1142
Product Category
Software
Teradata Vantage

アクセス計画は、SELECTリクエストのWHERE句内のBEGINまたはEND範囲関数で指定されている等号制約がある場合、単一行パーティションをスキャンし、テーブルの行パーティション化レベルはその関数で定義されます。

単一パーティション スキャンの実行ルール

次のテーブルは、この状況で単一パーティション スキャンを実行する際のルールを説明したものです。

プライマリ インデックスが行パーティション化される場所 テーブルのプライマリ インデックス検索のWHERE句に指定する内容 データベースの動作
BEGIN範囲関数 BEGIN関数での等号制約 単一行パーティション アクセスになります。
END関数での等号制約 単一行パーティション アクセスになりません。
BEGIN関数とEND関数の両方での等号制約 単一行パーティション アクセスになります。
END範囲関数 BEGIN関数での等号制約 単一行パーティション アクセスになりません。
END関数での等号制約 単一行パーティション アクセスになります。
BEGIN関数とEND関数の両方での等号制約 単一行パーティション アクセスになります。
BEGIN範囲関数とEND範囲関数の両方 BEGIN関数のみでの等号制約 単一行パーティション アクセスになりません。
END関数のみでの等号制約 単一行パーティション アクセスになりません。
BEGIN関数とEND関数の両方 単一行パーティション アクセスになります。

パーティション化されたテーブルに対する単一パーティションBEGINまたはEND範囲関数スキャンの例

次の2つのテーブルを定義するとします。

CREATE SET TABLE t11 (
  a INTEGER,
  b PERIOD(DATE))
PRIMARY INDEX(a)
PARTITION BY CAST ((BEGIN(b)) AS INTEGER);
CREATE SET TABLE t12 (
  a INTEGER,
  b PERIOD(DATE))
PRIMARY INDEX(a)
PARTITION BY CAST((END(b)) AS INTEGER);

関連するEXPLAIN句のテキストは、後に示すレポートの例で太字で強調表示されています。

次のSELECTリクエストは、単一パーティション スキャンを使用して行にアクセスします。
EXPLAIN
SELECT *
FROM t11
WHERE BEGIN(b)=DATE '2005-02-03';
EXPLAIN出力の一部を次に示します。
...
3) We do an all-AMPs RETRIEVE step  from a single partition  of
   df2.t11 with a condition of  ("df2.t11.b = PERIOD 
   (DATE '2005-02-03',  DATE '2005-02-03'")
   with a residual condition of ("(BEGIN(df2.t11.b ))
   = DATE '2005-02-03'") into Spool 1 (group_amps), which is built 
   locally on the AMPs. The size of Spool 1 is estimated with no 
   confidenceto be 1 row (56 bytes). The estimated time for this step 
   is 0.03seconds.
...

次のSELECTリクエストは、全行、全パーティション スキャンを使用して行にアクセスします。述部およびパーティション式が異なる範囲で定義されているためです。

EXPLAIN
SELECT *
FROM t11
WHERE END(b)=DATE '2005-02-03';
...
3) We do an all-AMPs RETRIEVE step from df2.t11  by way of an 
    all-rows scan  with a condition of  ("(END(df2.t11.b ))= DATE 
    '2005-02-03'")  into Spool 1 (group_amps), which is built 
   locally on the AMPs. The size of Spool 1 is estimated with no 
   confidence to be 1 row (56 bytes). The estimated time for this step 
   is 0.03 seconds.
...

次のSELECTリクエストは、単一パーティション スキャンを使用して行にアクセスします。

EXPLAIN
SELECT *
FROM t12
WHERE END(b)=DATE '2006-02-03';
...
3) We do an all-AMPs RETRIEVE step  from a single partition of 
    df2.t12  with a condition of  ("df2.t12.b = PERIOD 
   (DATE '2006-02-03'- INTERVAL '1' DAY, DATE '2006-02-03')")  
   with a residual condition of  ("(END(df2.t12.b ))= DATE  
   '2006-02-03'")  into Spool 1 (group_amps), which is built locally 
   on the AMPs. The size of Spool 1 is estimated with no confidence to
   be 1 row (56 bytes). The estimated time for this step is 0.03 
   seconds.
...

次のSELECTリクエストは、単一パーティション スキャンを使用して行にアクセスします。

EXPLAIN
SELECT *
FROM t12
WHERE a=1
AND   END (b)=DATE '2006-02-03';
1) First, we do a single-AMP RETRIEVE step  from a single partition of 
    df2.t12  by way of the primary index "df2.t12.a = 1,
   df2.t12.b = PERIOD (DATE '2006-02-03'-INTERVAL '1' 
   DAY, DATE '2006-02-03')" with a residual condition of 
   ("((END(df2.t12.b )) = DATE '2006-02-03') AND (df2.t12.a = 1)")  
   into Spool 1 (one-amp), which is built locally on that AMP. 
   The size of Spool 1 is estimated with low confidence to be 1 row 
   (56 bytes). The estimated time for this step is 0.02 seconds.
...