Я использую SQL SERVER 2012
мое Auto Update Stats
ON в моей базе данных.
Из ссылки ниже я узнал, что статистика автоматического обновления будет срабатывать при каждом SQRT(1000 * Table rows)
изменении строк таблицы.
https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/
Я создал таблицу с 1000 записей
SELECT TOP 500 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
name
INTO stst
FROM sys.objects
Создание статистики
CREATE STATISTICS rn
ON stst (rn)
CREATE STATISTICS name
ON stst (name)
Проверка созданной статистики
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
По формуле
select SQRT(1000 * 500) -- 707.106781186548
Так что, если я добавлю / изменим 707.106781186548
записи в моей таблице, автоматическое обновление статистики должно сработать
Добавьте 1000
больше записей в мою таблицу, которых должно быть более чем достаточно, чтобы выстрелитьauto update stats
INSERT INTO stst(rn,name)
SELECT TOP 1000 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
a.name
FROM sys.objects a
Уволить auto update stats
Select * from stst
Проверка статистики
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
К сожалению , до сих пор Rows
является 500
только.
Даже после вставки 1000
записей в мою таблицу, что явно больше, чем 707.106781186548
при выполнении, SELECT
почему статистика автоматического обновления не срабатывает? Что мне здесь не хватает
источник
Ответы:
Новое вычисление используется только в том случае, если включен флаг трассировки 2371, за исключением SQL Server 2016, когда уровень совместимости базы данных контекста установлен на 130, где это поведение по умолчанию. См. Microsoft KB 2754171:
Управление поведением Autostat (AUTO_UPDATE_STATISTICS) в SQL Server
Статистика не обновляется при изменении данных. Обновление статистики запускается, когда оптимизация на основе затрат обнаруживает, что интересная статистика для запроса устарела.
Оптимизатор не вводит оптимизацию на основе затрат для очень простых («тривиальных») запросов, где один очевидный план всегда оптимален. В этом сценарии обновления статистики не происходят.
См. Microsoft White Paper Plan «Кэширование и перекомпиляция в SQL Server 2012 » Грега Лоу.
источник