2010-04-17 320 views
1

PostgreSQL存儲有關係統表中名爲pg_class的表的統計信息。查詢規劃器爲每個查詢訪問此表。這些統計信息只能使用分析命令進行更新。如果分析命令不經常運行,則此表中的統計信息可能不準確,並且查詢規劃人員可能做出可能會降低系統性能的糟糕決策。另一個策略是查詢規劃器爲每個查詢生成這些統計信息(包括選擇,插入,更新和刪除)。這種方法將允許查詢計劃者獲得最新的統計信息。postgreSQL - pg_class問題

爲什麼postgres總是依賴於pg_class?

+0

統計信息存儲在['pg_statistics'](https://www.postgresql.org/docs/current/static/catalog-pg-statistic.html),而不是'pg_class' – 2017-02-02 08:15:18

回答

2

pg_class不包含規劃器所需的所有統計信息,它只包含關於表結構的信息。通過analyze命令生成的統計數據包含關於執行命令時,就像在每列存在這樣值的信息:

SELECT * FROM tab WHERE cname = "pg"; 

規劃者知道行有多少是在表中有多少行有列中的值「PG」 CNAME。這些信息在pg_class中不存在。

PostgreSQL的另一個不錯的功能是自動清理,在99,9999%的情況下它應該被啓用,因此數據庫一旦一些(可以在配置文件中定義的)行數改變就實現統計數據。由於錯誤的表統計數據,可以最大限度地減少錯誤執行計劃的機會。