web-dev-qa-db-ja.com

マテリアライズドビューの更新後に必要な分析を行いますか?

実行することになっていますANALYZE myview;を実行した後、PostgreSQL 9.6+マテリアライズドビューでREFRESH MATERIALIZED VIEW CONCURRENTLY myview;

それとも役に立たないのですか(おそらくインデックス統計は更新時にすでに更新されていますか?)

5
Nicolas Payart

テーブル統計はnotが自動的に更新されます。

  • CONCURRENTLYオプションで更新した場合、変更されません。

  • CONCURRENTLYがない場合、テーブルに新しいファイルが書き込まれ、システムカタログpg_classの基本カウントrelpagesreltuplesが結果的に0にリセットされます。ただし、pg_statisticの(列ごとの)テーブル統計は変更されません。

Postgres 9.6でクイックテストを実行して確認しました。

場合によっては(クエリプランが現在の統計にあまり依存しない場合)、時間を節約し、ANALYZEをまったく実行しないほうがよい場合があります。その他の場合はすべて、REFRESHの直後に手動でANALYZE myview;をスケジュールする必要があります。または、autovacuumが作動するまで待機します。これは、十分な行が変更された場合にのみ発生します(CONCURRENTLYは実際にMVでDDLコマンドを実行して、変更された行にのみ影響を与えます)。

7