Начало работы
Подключение
Тесты производительности
Развёртывание
Использование данных
Загрузка данных
Миграция данных
Запрос данных
Управление кластерами
Обновление
Глобальное обслуживание
Масштабирование
Мониторинг
Безопасность
Лучшие практики
Технические принципы
Типы данных
Хранилище
Исполняющий движок
Потоковая обработка (Domino)
MARS3 Индексы
Расширения
Расширенные функции
Расширенный запрос
Федеративные запросы
Grafana
Резервное копирование и восстановление
Аварийное восстановление
Руководство
Настройка производительности
Устранение неполадок
Инструменты
Параметры конфигурации
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.