集約結合インデックスをクエリー計画の中で使用するための最適化ルーチンのルール - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage
最適化ルーチンは、集約結合インデックスの使用に関するすべてのクエリーを分析します。クエリーの処理に集約結合インデックスを使用可能かどうかを見極めるに当たり、最適化ルーチンは次のルールを当てはめます。
  • 集約結合インデックスを非集約クエリーの実テーブルの代わりに使用することはできない。
  • 単純な結合インデックスと同様、集約結合インデックス も、クエリーの同じ結合または結合のサブセットを指定しているのであれば、計画の中に含めることができます。
  • 集約結合インデックスがクエリーの結合のサブセットを指定している場合、集約結合インデックスのテーブルの残りの結合条件のすべての結合フィールドは、GROUP BY句集約結合インデックス定義の選択リストで指定されていなければなりません。
  • 集約結合インデックスがクエリーと同じ結合を指定するとしても、そのGROUP BY句がクエリーのGROUP BY列と同じまたはその上位集合でない場合、それは適格ではありません。
  • 集約結合インデックスには、それが置換するテーブルへのクエリーが必要とするすべての列が含まれていることが必要です。クエリーから結合インデックスの選択リストへ式を突き合わせようとするとき、最適化ルーチンは次のルールを当てはめます。
    • 集約結合インデックスには、SUM、COUNT、MIN、およびMAX集約関数のみが有効です。
    • 和算と乗算は交換可能です。
    • Teradata Databaseは、COUNT(*)とCOUNT(non_null_expression)のどちらの項も明示的に定義されていない場合に、集約結合インデックスの定義に任意のの項を暗黙的に追加します。
    • Teradata Databaseでは、COUNT(*)とCOUNT(non-null_expression)を交換可能です。
    • 集約式には別名を割り当てる必要があります。
    • 集約結合インデックスのプライマリ インデックスを集約式の別名に基づいて定義することはできません。
    • 集約式のオペランドを修飾する目的でDISTINCT演算子を指定することはできません。例えば、集約結合インデックスの定義に、MIN(DISTINCT column_expression)を指定することはできません。
    • FLOATに変換される結合インデックスからの数値式は、クエリーからの変換の有無にかかわりなく、定義された同じタイプの式との突合わせに使用できます。
    • クエリーの中のAVERAGE集約式は、集約結合インデックスがそれを置き換えるとき、SUM/COUNT式に変換されます。
    • クエリーの中のSUM (0)は値0の定数に変換されます。
    • クエリーの中のSUM (定数)式は、集約結合インデックス定義では定数*COUNT (*)に一致します。
    • SUM (CASEexpression)またはCOUNT (CASEexpression)のSUMまたはCOUNT関数は、一致するものを見つけるためにCASE式のすべての結果の式に含めることができます。たとえば、以下の式は、一致するものを見つけるために、その下の式に変換できます。
          SUM(CASE WHEN x1=1
              THEN 1
              ELSE 0)
                
              CASE WHEN x1=1
              THEN SUM(1)
              ELSE SUM(0)
    • 条件は、以下の変換テーブルに従って変換されます。
      条件 変換後の等価式
      expression ≥ ‘YYYY0101’ ‘EXTRACT(YEAR FROM expression) ≥ YYYY’
      expression > ‘YYYY1231’ ‘EXTRACT(YEAR FROM expression) > YYYY’
      expression < ‘YYYY0101’ ‘EXTRACT(YEAR FROM expression) < YYYY’
      expression ≤ ‘YYYY1231’ ‘EXTRACT(YEAR FROM expression) ≤ YYYY’
      expression ≥ ‘YYYYMM01’ ‘EXTRACT(YEAR FROM expression) > YYYY’

      または

      ‘(EXTRACT(YEAR FROM expression) = YYYY

      AND

      EXTRACT(MONTH FROM expression) ≥ MM)’

      expression > ‘YYYYMMLD’

      LDはMMによって指定された月の最後の日です。

      ‘EXTRACT(YEAR FROM expression) > YYYY’

      または

      ‘(EXTRACT(YEAR FROM expression) = YYYY

      AND

      EXTRACT(MONTH FROM expression) > MM)’

      expression ≤ ‘YYYYMMLD’

      LDはMMによって指定された月の最後の日です。

      ‘EXTRACT(YEAR FROM expression) < YYYY’

      または

      ‘(EXTRACT(YEAR FROM expression) =YYYY

      AND

      EXTRACT(MONTH FROM expression) ≤ MM)’

      expression < ‘YYYYMM01’ ‘EXTRACT(YEAR FROM expression) < YYYY’

      または

      ‘(EXTRACT(YEAR FROM expression) = YYYY

      AND

      EXTRACT(MONTH FROM expression) < MM)’