17.05 - 例: 統計を再収集する際のTHRESHOLDオプションの使用 - 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
日本語 (日本)

次の2つのリクエストでは、ordersテーブルのo_orderkey列とo_orderdatetime列についての統計を初めて収集します。データベースは、両方のリクエストに対して完全な統計を収集し、システムは各レベルでのTHRESHOLDオプションを維持します。

最初のリクエストは、データの10%の変更をしきい値として指定するか、または最後のorders.o_orderkeyの統計収集から7日後をしきい値と指定します。データベースは、これらの基準を初回の統計収集には使用しませんが、これらをDBC.StatsTblに保存し、orders.o_orderkyについての統計を以降に再収集する際に参照できるようにします。

以降のorders.o_orderkeyの統計を再収集するリクエストでは、データベースは、データの変化の割合が10%を超えているか、および最後の統計収集から7日以上経過しているかどうかを判断します。どちらかまたは両方の基準を超過しているとシステムは統計を再収集しますが、どちらの基準も超過していなければ、システムはorders.o_orderkeyの統計を再収集しません。

     COLLECT STATISTICS USING THRESHOLD 10 PERCENT AND THRESHOLD 7 DAYS
     COLUMN o_orderkey
     ON orders;

2番目のリクエストは、システムにより決まるデータ変化しきい値を指定します。データベースは、この基準を初回の統計収集には使用しませんが、これをDBC.StatsTblに保存し、以降にorders.o_orderdatetimeについての統計を再収集する際に参照できるようにします。

以降のorders.o_orderdatetimeの統計を再収集するリクエストでは、データベースは、最終回の統計収集以降のデータの変更がシステムにより決められたしきい値基準を超過しているかどうかを判断します。基準を超過していると、システムは統計を再収集しますが、基準に満たなければ、システムはorders.o_orderdatetimeの統計を再収集しません。

    COLLECT STATISTICS USING SYSTEM THRESHOLD
     COLUMN o_orderdatetime
     ON orders;

データベースは、指定されたしきい値を格納して、そのしきい値を、orderso_orderkeyあるいはo_orderdatetime列についての統計を再収集する今後のリクエストに使用します。

次のリクエストでは、ordersテーブルについての統計を再収集します。統計収集時に使用されたTHRESHOLDの設定に基づいて、テーブルの増分が10%未満であるか、既存の統計の経過日数が7日未満であれば、最適化ルーチンはorders.o_orderkeyについての統計を再収集しません。データベースは、増分が10%を超えるかまたは経過日数が7日を超えるの場合のみに、これらの統計を再収集します。同様に、列o_orderdatetimeの増分がシステム選択によるo_orderdatetimeのしきい値未満であれば、最適化ルーチンはそれらの統計を再収集しません。

     COLLECT STATISTICS ON orders;

これらのリクエストでのTHRESHOLDオプションの設定に応じて、最適化ルーチンが要求された統計を実際に再収集するかどうかは、次の基準によって決定されます。

  • ordersのカーディナリティにおける増分が10%未満で、既存の統計の経過日数が7日間未満であれば、最適化ルーチンは該当する統計を再収集しません。

    増分割合(パーセント)のしきい値と経過日数しきい値の両方を指定していますが、両方とも基準に達しなければデータベースがo_orderkeyの統計を再収集しないわけではありません。例えば、システムが、テーブルの増分率がシステムにより決められたしきい値テーブルを超えたと判断すれば、経過日数がしきい値未満でも、システムは指定された統計を再収集します。

  • ordersのカーディナリティにおける増分が、システム選択によるo_orderdatetimeのしきい値に満たなければ、最適化ルーチンはそれらの統計を再収集しません。

    データベースが選択するしきい値は、最後の統計収集以降の列の更新-削除-挿入回数の履歴などに応じて決まります。詳細は、<Teradata Vantage™ - SQLリクエストおよびトランザクション処理、B035-1142>を参照してください。

次のリクエストでは、設定したしきい値に達した場合にorders.o_orderdatetimeについての統計を再収集します。テーブルの増分がシステム選択によるしきい値に満たなければ、最適化ルーチンは要求された統計を再収集しません。

     COLLECT STATISTICS 
     COLUMN o_orderdatetime
     ON orders;

次のリクエストでは、ユーザー指定による増分のしきい値10%に基づいて、o_orderdatetimeについての統計を再収集します。テーブルの増分が10%以下であれば、最適化ルーチンは要求された統計を再収集しません。データベースは、新たに指定されたTHRESHOLDのパーセント数を記憶して、以降の統計の再収集に使用できるようにします。

     COLLECT STATISTICS USING THRESHOLD 10 PERCENT
     COLUMN o_orderdatetime
     ON orders;

次のリクエストでは、しきい値オプションと照合せずに、o_orderdatetimeについての統計を再収集します。この場合、統計の再収集が強制的に行なわれます。FOR CURRENT句を指定しているため、既存のしきい値オプションは変更されず、指定したNO THRESHOLD設定が以降のorders.orderdatetimeに関する統計の再収集のために記憶されることはありません。

     COLLECT STATISTICS USING NO THRESHOLD FOR CURRENT
     COLUMN o_orderdatetime
     ON orders;

次のリクエストでは、o_orderdatetimeについての統計を再収集します。NO THRESHOLDの指定により、データベースで統計の再収集が強制的に行なわれます。最適化ルーチンは、新たに指定したTHRESHOLDオプションを記憶し、以降は常に統計を再収集します。

     COLLECT STATISTICS USING NO THRESHOLD
     COLUMN o_orderdatetime
     ON orders;

次のリクエストでは、前述の例で収集した統計を再収集します。前回の収集からテーブルのデモグラフィックが変更された数が10%未満で、既存の統計の経過日数が7日未満であれば、最適化ルーチンはo_orderkeyについての統計を再収集しません。

つまり、変更数が10%を超過しているか、または前回の統計収集から7日より経過していると、データベースはo_orderkeyについての統計を再収集します。同様に、テーブルのデモグラフィックの変更数が、システムにより決められたo_orderdatetimeo_orderstatusの変更数しきい値に満たなければ、最適化ルーチンはこれらの2つの列の再収集を行ないません。

     
COLLECT STATISTICS ON orders;

次のリクエストでは、o_orderdatetimeについての統計を再収集します。前回の統計収集からのテーブルのデモグラフィックの変更数が、システムにより決められた変更数のしきい値に満たなければ、最適化ルーチンは要求された統計を再収集しません。

     COLLECT STATISTICS 
     COLUMN o_orderdatetime
     ON orders;

次のリクエストは、ユーザー指定による変更率のしきい値10%に基づいて、o_orderdatetimeについての統計を再収集します。前回の統計収集からテーブルのデモグラフィック変更が10%未満であれば、最適化ルーチンは要求された統計を再収集しません。

データベースは、THRESHOLDの変更割合を格納して、今後の再収集に使用します。

     COLLECT STATISTICS 
     USING THRESHOLD 10 PERCENT
     COLUMN o_orderdatetime
     ON orders;

次のリクエストでは、しきい値と照合せずに、o_orderdatetimeについての統計を再収集します。この場合、統計を強制的に再収集します。FOR CURRENTオプションを指定するので、データベースは既存のTHRESHOLDの指定を変更せず、以降の再収集で参照できるようにNO THRESHOLDオプションを保存しておくこともありません。

     COLLECT STATISTICS 
     USING NO THRESHOLD FOR CURRENT
     COLUMN o_orderdatetime
     ON orders;

次のリクエストは、前のリクエストと同じですが、このCOLLECT STATISTICSリクエストではFOR CURRENTオプションを指定しない点が前のリクエストと異なります。このリクエストではFOR CURRENTを指定しないため、最適化ルーチンはこのNO THRESHOLDの指定を保存して、以降のリクエストで統計を再収集します。

     COLLECT STATISTICS 
     USING NO THRESHOLD
     COLUMN o_orderdatetime
     ON orders;