51.51. pg_statistic#

51.51. pg_statistic

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 разработана таким образом, чтобы не предполагать слишком много о том, какую статистику она хранит. Только крайне общие статистические данные (например, наличие NULL) имеют отдельные столбцы в pg_statistic. Все остальное хранится в слотах, которые представляют собой группы связанных столбцов, содержимое которых идентифицируется кодовым номером в одном из столбцов слота. Дополнительную информацию см. в 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

Кодовый номер, указывающий тип статистики, хранящейся в Nслоте строки pg_statistic.

staopN oid (ссылается на pg_operator.oid)

Оператор, используемый для получения статистики, хранящейся в Nслоте. Например, слот гистограммы показывает оператор <, который определяет порядок сортировки данных. Ноль, если вид статистики не требует оператора.

stacollN oid (ссылается на pg_collation.oid)

Правило сортировки, используемое для получения статистики, хранящейся в Nслоте. Например, слот гистограммы для колонки, позволяющей сортировку данных, будет показывать правило сортировки, которое определяет порядок сортировки данных. Ноль для несортируемых данных.

stanumbersN float4[]

Числовая статистика соответствующего вида для N-го слота, или null, если вид слота не включает числовые значения

stavaluesN anyarray

Значения данных столбца соответствующего типа для N-го слота, или null, если тип слота не хранит значения данных. Фактически значения элементов каждого массива являются специфическим типом данных конкретного столбца или связанным типом, таким как тип элемента массива, поэтому нет способа определить типы этих столбцов более точно, чем anyarray.