GENERATE_SMART_STATS_FOR_FIELDS

説明

ストアドプロシージャ GENERATE_SMART_STATS_FOR_FIELDS は、JDBC 基本ビューのフィールドの統計 (各フィールドの最小値、最大値など) とビューの行数を収集 および 格納します。

これらの統計を取得するために、このプロシージャは、 GENERATE_STATS プロシージャおよび GENERATE_STATS_FOR_FIELDS プロシージャのように複数の集約関数を使用して SELECT クエリを実行するのではなく、データベースのシステムテーブルに対してクエリを実行します。このアプローチのメリットは、ビューの統計をはるかに早く取得できることです。

このプロシージャは、JDBC 基本ビューの統計を収集するためにのみ使用できます。他のタイプのビューの統計を収集するには、 GENERATE_STATS (「 GENERATE_STATS 」を参照) または GENERATE_STATS_FOR_FIELDS (「 GENERATE_STATS_FOR_FIELDS 」を参照) を使用します。

JDBC 基本ビューの統計を取得する前に、ソースデータベース (Oracle、IBM DB2 など) にこのテーブルの統計が存在することを確認してください。統計が存在しないか、古くなっている場合、正確な情報が収集されず、コストベースの最適化によって次善の実行プランが選択されない可能性があります。

構文

GENERATE_SMART_STATS_FOR_FIELDS (
      mode : text
    , view_name : text
    , fields: array
    , table_stats : boolean
    , database_name : text
)
  • mode: このプロシージャによる統計の収集方法を設定します。有効な値を以下に示します。

    • SMART_ONLY: このプロシージャは、データベースのシステムテーブルから統計を収集します。

      このモードは、ビューの [Options] の [Statistics] タブにある [Complete missing statistics…] チェックボックスをオフにするのと同じことです。

    • SMART_THEN_ATSOURCE_THROUGH_VDP: このプロシージャは、データベースのシステムテーブルから統計を収集します。次に、 SELECT ステートメントを実行して、データベースのシステムテーブルから取得できない統計を収集します。

      このモードは、ビューの [Options] の [Statistics] タブにある [Complete missing statistics…] チェックボックスをオンにするのと同じことです。

    • ATSOURCE_THROUGH_VDP_ONLY: このプロシージャは、システムテーブルに対してクエリを実行しません。代わりに、 SELECT ステートメントを実行します。このモードは、 GENERATE_STATS プロシージャまたは GENERATE_STATS_FOR_FIELDS プロシージャを実行するのと同じことです。このオプションは、Administration Tool では使用できません。

  • view_name: このプロシージャは、このビュー (大文字/小文字が同じ) の統計を収集します。

  • fields: 統計を収集する対象となるフィールドで構成されるレジスターの配列。各レジスターには以下の 3 つのフィールドがあります。

    • フィールドの名前。

    • stats: 収集する統計の配列。 FIELD_COUNT_DISTINCT (個別の値)、 FIELD_AVG_LEN (平均サイズ)、 FIELD_MAX (最大値)、 FIELD_MIN (最小値)、および FIELD_NUM_NULLS (NULL 値) です。

      null の場合、フィールドのすべての統計を収集します。

    • source_stat_name: このビューの統計を保持しているデータベース内のオブジェクトの名前。

      Microsoft SQL Server などの一部のソースでは、同じフィールドまたは一連のフィールドから複数の統計を生成し、それらを異なるオブジェクトに格納できます。

      null の場合、このプロシージャはデフォルトのオブジェクトから統計を取得します。該当しない場合、この値は無視されます。

  • table_stats: true の場合、このプロシージャはテーブルの行数を取得します。 false の場合は取得しません。

  • databasename: view_name が属するデータベースの名前。

    null の場合、プロシージャは現在のデータベースの view_name を検索します。

例 1

CALL GENERATE_SMART_STATS_FOR_FIELDS('SMART_ONLY'
    , 'internet_inc'
        , {
        ROW('iinc_id',NULL,NULL),
        ROW('specific_field1',NULL,NULL),
        ROW('taxid',NULL,NULL)
        }
    , true)

このプロシージャは、ビュー internet_inc のフィールド iinc_idspecific_field1 、および taxid の統計を収集します。

そのために、データベースのシステムテーブルに対してのみクエリを実行します。

例 2

CALL GENERATE_SMART_STATS_FOR_FIELDS('SMART_ONLY'
    , 'internet_inc'
        , {
        ROW('iinc_id',NULL,NULL),
        ROW('specific_field1',NULL,NULL),
        ROW('taxid',NULL,NULL)
        }
    , false)

前の例と同じ操作を実行しますが、テーブルの行数は収集しません (最後のパラメーターの値に注意してください)。

例 3

CALL GENERATE_SMART_STATS_FOR_FIELDS('SMART_ONLY'
    , 'internet_inc'
        , { ROW('summary',
            { ROW('FIELD_NUM_NULLS'),
            ROW('FIELD_COUNT_DISTINCT'),
            ROW('FIELD_AVG_LEN') }, NULL)}
    , true);

ビューの行数と、 summary フィールドの「NULL 値」、「個別の値」、および「平均サイズ」の統計を収集します。

SMART_ONLY パラメーターがあるため、データベースのシステムテーブルに対してのみクエリを実行して統計を収集します。

例 4

CALL GENERATE_SMART_STATS_FOR_FIELDS('SMART_ONLY'
    , 'internet_inc'
        , {
        ROW('iinc_id',NULL,NULL),
        ROW('specific_field1',NULL,NULL),
        ROW('taxid',NULL,NULL)
        }
    , true
    , 'example')

このプロシージャは、データベース example に属する、ビュー internet_inc のフィールド iinc_idspecific_field1 、および taxid のすべての統計を収集します。