表単位で統計情報を収集する方法

この記事では表単位で統計情報を収集する方法について解説します。

 表単位で統計情報を収集する方法

表単位で移行した際などに表単位で統計情報を収集したい場合があるかと思います。

そのようなときはDBMS_STATSパッケージのGATHER_TABLE_STATSプロシージャを使用して実現できます。

プロシージャの構文は以下のようになります。

DBMS_STATS.GATHER_TABLE_STATS (<スキーマ名>,<テーブル名>);

主なオプションは以下のようなものがあります。

partname:パーティションの名前を指定します。

degree:並列度を指定します。

granularity:パーティション表に対して、統計情報をどのレベルで収集するか指定します。

cascade:表の索引に対しても統計情報を収集します。


 実行例

「TEST」スキーマのパーティション表「SALES」に対してパーティション名「SALES_2022」に対してパーティション単位で統計情報を収集します。

SQL> exec DBMS_STATS.GATHER_TABLE_STATS ('TEST','SALES',partname => 'SALES_2022',granularity => 'PARTITION');
PL/SQLプロシージャが正常に完了しました。

パーティション単位で収集されているか確認します。

SQL> SELECT partition_name, last_analyzed FROM user_tab_partitions ORDER BY partition_name;
PARTITION_NAME LAST_ANALYZED
-------------- -------------------
SALES_2019     2024/01/10-17:13:29
SALES_2020     2024/01/10-17:13:29
SALES_2021     2024/01/10-17:13:29
SALES_2022     2024/01/15-17:15:35
SALES_2023     2024/01/10-17:13:29

「SALES_2022」のみ更新されていることが確認できました。