Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Определяет расширенную статистику.
CREATE STATISTICS [ IF NOT EXISTS ] <statistics_name>
[ ( <statistics_kind> [, ... ] ) ]
ON <column_name>, <column_name> [, ...]
FROM <table_name>
CREATE STATISTICS создает новый объект расширенной статистики, отслеживающий данные указанной таблицы, внешней таблицы или материализованного представления. Объект статистики создается в текущей базе данных и будет принадлежать пользователю, выполнившему команду.
Если указано имя схемы (например, CREATE STATISTICS myschema.mystat ...), то объект статистики создается в указанной схеме. В противном случае он создается в текущей схеме. Имя объекта статистики должно отличаться от имени любого другого объекта статистики в той же схеме.
Вы должны быть владельцем таблицы, чтобы создать объект статистики, ссылающийся на неё. Однако после создания владение объектом статистики становится независимым от базовых таблиц.
Создайте таблицу t1 с двумя функционально зависимыми столбцами, то есть знание значения в первом столбце позволяет однозначно определить значение во втором столбце. Затем создайте статистику функциональных зависимостей по этим столбцам:
CREATE TABLE t1 (
a int,
b int
);
INSERT INTO t1 SELECT i/100, i/500
FROM generate_series(1,1000000) s(i);
ANALYZE t1;
-- the number of matching rows will be drastically underestimated:
EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);
CREATE STATISTICS s1 (dependencies) ON a, b FROM t1;
ANALYZE t1;
-- now the row count estimate is more accurate:
EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);
Без статистики функциональных зависимостей планировщик предполагает, что два условия WHERE независимы, и перемножает их селективности, получая слишком маленькую оценку количества строк. При наличии такой статистики планировщик распознаёт избыточность условий WHERE и не занижает оценку числа строк.
Create table t2 with two perfectly correlated columns (containing identical data), and a MCV list on those columns:
CREATE TABLE t2 (
a int,
b int
);
INSERT INTO t2 SELECT mod(i,100), mod(i,100)
FROM generate_series(1,1000000) s(i);
CREATE STATISTICS s2 (mcv) ON a, b FROM t2;
ANALYZE t2;
-- valid combination (found in MCV)
EXPLAIN ANALYZE SELECT * FROM t2 WHERE (a = 1) AND (b = 1);
-- invalid combination (not found in MCV)
EXPLAIN ANALYZE SELECT * FROM t2 WHERE (a = 1) AND (b = 2);
Список MCV предоставляет планировщику более подробную информацию о конкретных значениях, часто встречающихся в таблице, а также верхнюю границу селективности комбинаций значений, отсутствующих в таблице, позволяя ему формировать более точные оценки в обоих случаях.
Оператор CREATE STATISTICS отсутствует в стандарте SQL.