Postgresql

刷新物化視圖後需要分析嗎?

  • July 23, 2021

我們是否應該在執行ANALYZE myview;PostgreSQL 9.6+ 物化視圖後執行REFRESH MATERIALIZED VIEW CONCURRENTLY myview;

還是沒用(也許索引統計資訊已經在刷新時更新了?)

表統計資訊不會自動更新。

  • CONCURRENTLY如果使用該選項刷新,它們將保持不變。
  • 如果沒有CONCURRENTLY,則會為該表寫入一個新文件,並且系統目錄中的基本計數relpages和因此將重置為. 不過,表中的統計資訊(每列)仍然保持不變。reltuples``pg_class``0``pg_statistic

我在 Postgres 9.6 中進行了快速測試以確認。

在某些情況下(查詢計劃不太依賴於目前統計數據),您可能希望節省時間並且根本不執行ANALYZE。在所有其他情況下,您需要/需要ANALYZE myview;REFRESH. 或者您等到 autovacuum 啟動,這僅在更改了足夠多的行時才會發生(CONCURRENTLY實際上在 MV 上執行 DML 命令以僅影響更改的行。)

引用自:https://dba.stackexchange.com/questions/194709