Предупреждение об отсутствии статистики в плане выполнения

24

У меня есть ситуация, которую я не могу понять. Мой план выполнения SQL Server говорит мне, что у меня отсутствует статистика в таблице, но статистика уже создана:

Предупреждение

Но если мы посмотрим на таблицу, то увидим, что есть статистика, которая была создана автоматически:

введите описание изображения здесь

Может кто-нибудь помочь понять, как это может быть?

Статистика Auto_Update и Auto_Create включена для текущей БД.

Я использую SQL Server 2014.

Арташес Хачатрян
источник

Ответы:

15

Предупреждение не всегда соответствует отсутствующей статистике из одного столбца .

Не существует простого способа точно определить точную статистику, которую оптимизатор искал и не нашел во всех случаях, но это почти всегда многостолбцовая статистика , которая предоставила бы некоторую информацию о корреляции между несколькими предикатами равенства в запросе.

Возможно, в вашем случае это точно соответствует предикатам в Фильтре после сканирования, где появляется предупреждение.

Было бы хорошо, если бы SQL Server сообщал обо всех столбцах для предупреждения «отсутствует статистика», но, к сожалению, сегодня это не так.

Может потребоваться определенное количество проб и ошибок, чтобы определить статистику по нескольким столбцам, которую необходимо создать, чтобы удалить предупреждение. Обратите внимание, что многостолбцовая статистика не может быть создана автоматически. Несмотря на предупреждение, качество оценки может улучшиться, а может и нет, даже если будет предоставлена ​​недостающая статистика.

Пол Уайт говорит, что GoFundMonica
источник
8

Поскольку кажется очевидным, что статистика для конкретного столбца уже существует, я предлагаю две возможности:

  1. Object Explorer указывает на другую базу данных - я подозрительно, потому что база данных имеет DEVимя, поэтому возможно, что в одном случае вы смотрите на dev, а в другом - нет.
  2. Используемый план создан до того, как была создана статистика (либо она была сгенерирована ранее, либо, что менее вероятно, что-то помешало запуску перекомпиляции при создании статистики).

Пожалуйста, подтвердите, что простой ответ (1) не является проблемой, и попробуйте выполнить тот же запрос, OPTION (RECOMPILE)чтобы подтвердить или исключить (2).

Аарон Бертран
источник
1
Аарон Бертнанд, большое спасибо за ваш ответ. Но Object Explorer указывает на текущую базу данных, и добавление OPTION (RECOMPILE) не решает проблему. Я также хочу добавить, что мой запрос выполняет хранимую процедуру.
Арташес Хачатрян
2

Я только что заметил, что когда вы получаете такие предупреждения о статистике, если вы запускаете свой запрос или процедуру с настройками ниже:

SET SHOWPLAN_ALL ON

введите описание изображения здесь

Вы можете увидеть, что недостает статистики:

введите описание изображения здесь

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

Марчелло Миорелли
источник