PostgreSQL 8.0.0 文書
前のページ | 巻戻し |  | 早送り | 次のページ

# ANALYZE

## 名前

ANALYZE -- データベースに関する統計の集計

## 概要

    ANALYZE [ VERBOSE ] [ table [ (column [, ...] ) ] ]

## 説明

`ANALYZE`はデータベース内のテーブルの内容に関する統計情報を集計し、その結果を`pg_statistic`システムテーブルに保存します。 その後、問い合わせプランナはその統計情報を、最も効率の良い問い合わせの実行計画を決定する際に使用します。

パラメータがない場合、`ANALYZE`は現在のデータベース内の全てのテーブルを検査します。 パラメータがある場合、`ANALYZE`はそのテーブルのみを検査します。 更に列名のリストを与え、その列の統計情報のみを更新することも可能です。

## パラメータ

`VERBOSE`

  進行状況の表示を有効にします。

`table`

  解析の対象とするテーブルの名前です (スキーマ修飾も可)。 デフォルトは、現在のデータベース内の全テーブルです。

`column`

  解析の対象とする列名です。 デフォルトは全列です。

## 出力

`VERBOSE`が指定された場合、`ANALYZE`は進行中のテーブルが何かを表す進捗メッセージを表示します。 同様にテーブルについて各種統計情報も表示されます。

## 注釈

`ANALYZE`を定期的に、もしくは、テーブルの内容に大きな変更があった後に行なうことを推奨します。 正確な統計情報により、プランナが最も適切な問い合わせ計画を選択できるようになります。 従って、問い合わせ処理の速度が向上します。 VACUUMと`ANALYZE`の実行について良く使用される方法は、1日1回、あまり使用されていない時間帯に実行することです。

`VACUUM FULL`とは異なり、`ANALYZE`は、対象とするテーブルの読み取りロックのみを必要とします。 ですので、そのテーブルに対する他の操作と並行して実行することができます。

通常、`ANALYZE`によって集計される統計情報には、各列の典型的な値と各列のデータ分布の概要を示す度数分布が含まれます。 `ANALYZE`があまり意味がないとみなした場合 (例えば、一意性制約キーの列では、典型的な値はありません) や、列のデータ型が適切な演算子をサポートしていない場合は、片方もしくは両方とも省略されてしまう可能性があります。 第21章に、統計情報についての詳細が記載されています。

巨大なテーブルでは、`ANALYZE`は、全ての行を検査するのではなくテーブルの中からランダムにサンプルを取り出します。 これにより、非常に巨大なテーブルの解析も短い時間で終わります。 しかし、その統計情報はおおよそのものでしかなく、テーブルの内容に変更がなくても`ANALYZE`を実行する度に変更されてしまうことに注意してください。 これにより、`EXPLAIN`が表示する、プランナの推定コストが多少異なることになります。 稀に、この非決定論のために、問い合わせオプティマイザが`ANALYZE`を実行する度に異なる問い合わせ計画を選択してしまうことがあります。 これを防止するには、以下に示すように`ANALYZE`で収集される統計情報の量を増やしてください。

default_statistics_target設定パラメータ変数を調整するか、もしくは`ALTER TABLE ... ALTER COLUMN ... SET STATISTICS`を使用して列単位の統計対象を設定して列ベースにすることで、解析の範囲を制御することができます (ALTER TABLE を参照してください)。 この対象値は典型的な値一覧のエントリ数の最大値と度数分布のビンの最大数を設定します。 デフォルトの対象値は10です。 しかし、プランナの推定精度と`ANALYZE`の処理時間と`pg_statistic`の占める容量とのトレードオフによって増減させることができます。 特に対象値を0に設定すると、その列に関する統計情報の集計は無効になります。 その列が決して 問い合わせの`WHERE`、`GROUP BY`や`ORDER BY`句に使用されない場合はこれは有用です。 プランナはそのような列の統計情報を使用しないからです。

解析される列内の統計情報対象値の最大値によって、統計情報を作成するために抽出するテーブルの行の数を決定します。 その対象を増加させることは、比例的に、`ANALYZE`に必要とされる時間と容量を増加させます。

## 互換性

標準SQLには`ANALYZE`文はありません。

前のページ | ホーム | 次のページ
ALTER USER | 上に戻る | BEGIN