?
本文檔使用
php中文網(wǎng)手冊 發(fā)布
pg_statistic表存儲有關(guān)該數(shù)據(jù)庫內(nèi)容的統(tǒng)計數(shù)據(jù)。記錄是由ANALYZE創(chuàng)建的, 并且隨后查詢規(guī)劃器使用。請注意所有統(tǒng)計信息本質(zhì)上都是近似的數(shù)值,即使假設(shè)它是最新的。
通常有一個條目,stainherit = false,為每個已分析的表列。如果表中有子繼承,第二項由stainherit = true創(chuàng)建。 此行代表關(guān)于繼承樹的列統(tǒng)計,即你看到用SELECT column FROM table*的統(tǒng)計數(shù)據(jù), 而stainherit = false行,表示SELECT column FROM ONLY table 的結(jié)果。
pg_statistic還存儲有關(guān)索引表達(dá)式數(shù)值的統(tǒng)計數(shù)據(jù)。這些是把它們當(dāng)作實際的數(shù)據(jù)字段來描述的; 特別是,starelid引用索引。不過,普通的非表達(dá)式字段沒有記錄,因為會和下層的表字段記錄冗余。 目前,索引表達(dá)式的記錄總是有stainherit = false。
因為不同類型的統(tǒng)計信息適用于不同類型的數(shù)據(jù),pg_statistic設(shè)計成不太在意 自己存儲的是什么類型的統(tǒng)計。只有極為常用的統(tǒng)計信息(比如NULL)才 在pg_statistic里給予專用的字段。其它所有東西都存儲在"槽位"中, 而槽位是一組相關(guān)的字段,它們的內(nèi)容用槽位中的一個字段的編碼號表示。 更詳細(xì)的信息請參閱src/include/catalog/pg_statistic.h。
pg_statistic不應(yīng)該是公開可讀的,因為即使是表內(nèi)容的統(tǒng)計信息也應(yīng)該認(rèn)為 是敏感的。例如:薪水字段的最大最小值肯定是相當(dāng)讓人感興趣的。 pg_stats是一 個在pg_statistic上的全局可讀的視圖, 它只顯示那些表對于當(dāng)前用戶可讀的信息。
Table 45-36. pg_statistic Columns
名稱 | 類型 | 引用 | 描述 |
---|---|---|---|
starelid | oid | pg_class.oid | 所描述的字段所屬的表或索引 |
staattnum | int2 | pg_attribute.attnum | 所描述的字段數(shù) |
stainherit | bool | ? | 如果為真,統(tǒng)計包括繼承子列,而不僅是 指定關(guān)系值 |
stanullfrac | float4 | ? | 該字段中為NULL記錄的比率 |
stawidth | int4 | ? | 非NULL記錄的平均存儲寬度,以字節(jié)計 |
stadistinct | float4 | ? | 字段里不同的非NULL數(shù)據(jù)值數(shù)。一個大于零的數(shù)值是不同值的實際數(shù)。 一個小于零的數(shù)值是表中行數(shù)的分?jǐn)?shù)的負(fù)數(shù)(比如,一個字段的數(shù)值平均出現(xiàn)概率為兩次, 那么可以表示為stadistinct = -0.5)。零值表示不同數(shù)值的數(shù)量是未知的。 |
stakindN | int2 | ? | 一個編碼,表示這種類型的統(tǒng)計存儲在pg_statistic行的第N個"槽位"。 |
staopN | oid | pg_operator.oid | 一個用于生成這些存儲在第N個"槽位"的統(tǒng)計信息的操作符。 比如,一個柱面圖槽位會顯示<操作符,該操作符定義了該數(shù)據(jù)的排序順序。 |
stanumbersN | float4[] | ? | 第N個"槽位"的相關(guān)類型的數(shù)值類型統(tǒng)計,如果該槽位和數(shù)值類型沒有關(guān)系,那么就是NULL |
stavaluesN | anyarray | ? | 第N個"槽位"相關(guān)類型的字段數(shù)據(jù)值,如果該槽位類型不存儲任何數(shù)據(jù) 值那么就是 NULL 。每個數(shù)組的元素值實際上都是指定字段的數(shù)據(jù)類型, 因此,除了把這些字段的類型定義成anyarray。之外,沒有更好的辦法。 |