支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不再支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2

51.51. pg_statistic #

目錄 pg_statistic 儲存關於資料庫內容的統計資料。條目由 ANALYZE 建立,隨後由查詢規劃器使用。請注意,即使假設統計資料是最新的,所有統計資料本質上都是近似值。

通常,對於每個已經過分析的資料表欄位,會有一個 stainherit = false 的條目。如果資料表有繼承子資料表或分割區,也會建立第二個 stainherit = true 的條目。此列表示欄位在繼承樹上的統計資料,也就是說,使用 SELECT column FROM table* 可以看到的資料的統計資料,而 stainherit = false 的列則表示 SELECT column FROM ONLY table 的結果。

pg_statistic 也儲存關於索引表達式值的統計資料。這些資料被描述為如同它們是實際的資料欄位;特別是,starelid 參考了索引。但是,不會為普通的非表達式索引欄位建立條目,因為它會與底層資料表欄位的條目重複。目前,索引表達式的條目始終具有 stainherit = false

由於不同種類的統計資料可能適合不同種類的資料,因此 pg_statistic 的設計並不假定它儲存了哪種類型的統計資料。只有非常一般的統計資料(例如空值)才在 pg_statistic 中給予專用欄位。其他所有內容都儲存在槽 (slot)中,這些槽是一組關聯欄位,其內容由槽中其中一個欄位的代碼數字識別。更多資訊請參閱 src/include/catalog/pg_statistic.h

公眾不應讀取 pg_statistic,因為即使是關於資料表內容的統計資訊也可能被認為是敏感的。(範例:薪資欄位的最小值和最大值可能非常有趣。)pg_stats 是一個可公開讀取的 pg_statistic 檢視表,它僅公開關於當前使用者可讀取的資料表的資訊。

表 51.51. pg_statistic 欄位

欄位名稱 類型

描述

starelid oid(參考 pg_class.oid

描述的欄位所屬的資料表或索引

staattnum int2(參考 pg_attribute.attnum

描述的欄位的編號

stainherit bool

如果為 true,則統計資料包含來自子資料表的值,而不僅僅是指定關係中的值

stanullfrac float4

欄位中為空值的條目的比例

stawidth int4

非空條目的平均儲存寬度,以位元組為單位

stadistinct float4

欄位中不同的非空資料值的數量。大於零的值是不同值的實際數量。小於零的值是資料表中的列數的乘數的負數;例如,欄位中大約 80% 的值為非空值,並且每個非空值平均出現大約兩次,則可以用 stadistinct = -0.4 表示。零值表示不同值的數量未知。

stakindN int2

一個代碼數字,指示儲存在 pg_statistic 列的第 N中的統計資料的種類。

staopN oid(參考 pg_operator.oid

用於匯出儲存在第 N中的統計資料的運算子。例如,直方圖槽會顯示定義資料排序順序的 < 運算子。如果統計資料種類不需要運算子,則為零。

stacollN oid(參考 pg_collation.oid

用於推導儲存在第 N插槽中統計資訊的排序規則。例如,可排序欄位的直方圖插槽會顯示定義資料排序順序的排序規則。不可排序的資料則為零。

stanumbersN float4[]

適用於第 N插槽的數值統計資料類型,如果該插槽類型不包含數值,則為 null。

stavaluesN anyarray

適用於第 N插槽的欄位資料數值,如果該插槽類型沒有儲存任何資料數值,則為 null。每個陣列的元素值實際上都是特定欄位的資料類型,或者像是陣列元素類型這種相關的類型,所以沒有辦法將這些欄位的類型定義得比 anyarray 更明確。


提交更正

如果您發現文件中有任何不正確、與您的特定功能使用經驗不符,或需要進一步澄清的地方,請使用此表單來回報文件問題。