53.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
выделены только для самых общих свойств (например, доля NULL). Всё остальное хранится в «слотах», представляющих собой группы связанных столбцов, содержимое которых определяется кодовым числом в одном из столбцов слотов. За подробностями обратитесь к src/include/catalog/pg_statistic.h
.
Каталог pg_statistic
не должен быть доступен на чтение всем, так как даже статистическая информация о содержимом таблицы может считаться конфиденциальной. (Например, довольно интересны могут быть минимальные и максимальные значения в столбце зарплаты.) Поэтому существует pg_stats
— доступное всем для чтения представление на базе pg_statistic
, в котором выдаётся информация только по тем таблицам, которые может читать текущий пользователь.
Таблица 53.51. Столбцы pg_statistic
Тип столбца Описание |
---|
Таблица (или индекс), к которой принадлежит описываемый столбец |
Номер описываемого столбца |
Если true, в статистике учитываются значения из дочерних таблиц, а не только в указанном отношении |
Доля записей, в которых этот столбец содержит NULL |
Средний размер хранения не NULL-элементов, в байтах |
Число различных и отличных от NULL значений в столбце. Число больше нуля представляет фактическое количество различных значений. Если это число меньше нуля, его модуль представляет множитель для общего количества строк в таблице; например, для столбца, в котором примерно 80% значений не NULL, и каждое отличное от NULL значение в среднем повторяется дважды, может быть представлено значение |
Кодовое число, определяющее род статистики, хранящейся в |
Оператор, с которым была получена статистика, хранящаяся в |
Правило сортировки, с которым была получена статистика, хранящаяся в |
Численная статистика соответствующего рода для |
Значения столбцов соответствующего рода для |