支援的版本:目前 (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 欄位 FROM 資料表* 看到的資料的統計資料,而 stainherit = false 列則代表 SELECT 欄位 FROM ONLY 資料表 的結果。

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

由於不同種類的統計資料可能適合於不同種類的資料,因此 pg_statistic 的設計並沒有假設它儲存了哪種類型的統計資料。只有非常通用的統計資料(例如空值)在 pg_statistic 中有專用的欄位。其他所有資料都儲存在 槽(slots) 中,這些槽是相關欄位的群組,其內容由槽欄位之一中的代碼編號識別。有關更多資訊,請參閱 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

欄位條目為 null 的比例

stawidth int4

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

stadistinct float4

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

stakindN int2

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

staopN oid (參考 pg_operator.oid)

一個用於推導儲存在第 N欄位 (slot) 中的統計資料的運算子。例如,直方圖欄位會顯示定義資料排序順序的 < 運算子。如果統計資料種類不需要運算子,則為零。

stacollN oid (參考 pg_collation.oid)

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

stanumbersN float4[]

N欄位 (slot) 的適當種類的數值統計資料,如果欄位種類不涉及數值,則為 null

stavaluesN anyarray

N欄位 (slot) 的適當種類的欄位資料值,如果欄位種類不儲存任何資料值,則為 null。每個陣列的元素值實際上是特定欄位的資料類型,或相關類型,例如陣列的元素類型,因此無法比 anyarray 更具體地定義這些欄位的類型。


提交更正

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