COLLECT STATISTICS(最適化ルーチン形式)のルールと指針 - 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
COLLECT STATISTICSの使用には、次のルールが適用されます。
  • COLLECT STATISTICSリクエストは次のように実行できます。
    • 単文リクエストの形で。
    • マクロ内の単一の文の形で。
    • BEGINおよびEND TRANSACTION文によって囲まれた明示的なTeradataセッション モード トランザクションの中の、唯一または最後の文の形で。
  • 基本グローバル一時テーブルにはデータが入っていないため、これらのテーブルに対して収集する統計のヒストグラムは、間隔がない0行カーディナリティのダミー ヒストグラムになります。

    COLUMNオプションまたはINDEXオプションを指定しないで、TEMPORARYを指定して実体化されたグローバル一時テーブルの統計を初めて収集する場合、実体化されたテーブルは、実一時テーブルから統計定義を継承します。

    TEMPORARYキーワードを指定してグローバル一時テーブルの統計を収集する場合に、そのテーブルが実体化されていなければ、現在のセッションでそのテーブルが実体化されます。

    セッションからログオフしたり、システムによって強制的にログオフさせられたりすると、実体化されたすべての一時テーブルの統計がデータベースによって自動的に削除されます。

  • インデックスが同じ列セットで定義されている場合は、システムは複数列統計をインデックス統計と同様に処理します。例については、複数列に関する統計収集を参照してください。
  • 複数列統計を収集する場合は、データベースによって列の順序が保持されます。ただし、INDEXキーワードを使用してインデックスで基本テーブルの統計を収集する場合は、フィールドIDに基づく昇順でインデックスの列が並べられます。
  • 実テーブル、グローバル一時テーブル、ハッシュ インデックス、結合インデックスで再収集できる列セットとインデックス セットの最大数は512です。

    他のリソースに関する制限値(使用可能なスプールの数、プラスチック ステップまたはコンクリート ステップのセグメントのサイズなど)によっては、列セットまたはインデックス セットの最大数が512より少なくなることもあります。

  • PERIODデータ型、BLOBデータ型、CLOBデータ型、またはGeospatial以外のUDTデータ型の列では統計情報を収集できません。

    PERIOD列のBEGIN式およびEND式では、統計を収集できます

    JSONデータ型の列全体で統計情報を収集することはできません。ただし、JSONデータ型の抽出部分で統計情報を収集できます。Teradata Vantage™ - JSONデータ型、B035-1150を参照してください。

  • 複雑な式を使用して定義された基本テーブルの列では、統計を収集できます。また、選択リストまたは列リストにおいて、それぞれ複雑な式を使用して定義された単一テーブルの結合インデックスまたはハッシュ インデックスの列についても統計を収集できます。どちらの方法でも、最適化ルーチンは、述部の中で複雑な式を指定するクエリーについて、正確な単一テーブル カーディナリティの見積もりを作成できます。これは、式または上位集合で定義された単純なインデックス列と照合することができます。詳細については、Teradata Vantage™- SQLリクエストおよびトランザクション処理、B035-1142を参照してください。ただし、基本テーブルの統計はすべての結合インデックスによって直接継承できるため、基本テーブルに対するCOLLECT STATISTICSが優先されます。
  • パーティション テーブルに関する統計を収集する場合は、以下のルールが適用されます。
    • プライマリ インデックス(プライマリ インデックス テーブルの場合)と行パーティション列セットの両方で統計を収集できます。
    • プライマリ インデックスの名前を使用して統計を収集することを指定する場合は、プライマリ インデックス列セットに関する統計だけが収集されます。
  • 以下のことが該当するテーブルに対するCOLLECT STATISTICSリクエストは送信できません。
    • 対象となるテーブルの統計が削除された
    • COLLECT STATISTICS … COLUMN句もCOLLECT STATISTICS … INDEX句も指定されていない

      統計が削除されたテーブルに対して統計の再収集を行なうことはできません。

  • 暗黙指定の列およびインデックス セットに関する統計の標準的な再収集では、USING SAMPLE句を指定できません。
  • 初回の統計収集で、または既存のオプションをリセットするためにUSINGオプションを指定すると、データベースはそれ以降の統計再収集にも同じオプションを自動的に適用します。
  • USINGオプションと一緒にFOR CURRENTオプションを指定すると、データベースは現在のCOLLECT STATISTICSリクエストに対してのみUSINGオプションを使用します。

    USINGオプションと一緒にFOR CURRENTオプションを指定した場合、データベースは今後の再収集のためにそのUSINGオプションを記憶することはありません。

  • 複数の統計を収集するには、1つのCOLLECT STATISTICSリクエストでそれらの統計をグループ化するようにしてください。

    初回の収集では、同じUSINGオプションを指定する統計をグループ化します。そうすれば、最適化ルーチンによってグローバル最適化処理(初期段階での集約処理や、集約レベルの引上げなど)が適用されます。

    統計の再収集の場合は、個々の統計で指定されているUSINGオプションの違いを無視してグループ化を行なえます。

    列やインデックスの参照なしでテーブル レベルのCOLLECT STATISTICSリクエストを使用して、テーブルまたは定数式のすべての統計を更新するようにしてください。

  • 列の参照やUSINGオプションと一緒にSUMMARYオプションを指定することはできません。
  • 列やインデックスで統計を再収集すると、テーブル レベルのデモグラフィックがデータベースによって自動的に更新されます。