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


24

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

Увага

Але якщо ми подивимось на таблицю, то побачимо, що є статистика, створена автоматично:

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

Може хтось допоможе зрозуміти, як це може бути?

Автоматичне оновлення та автоматичне створення статистики увімкнено в поточній БД.

Я використовую SQL Server 2014.

Відповіді:


15

Попередження не завжди відповідає відсутній статистиці про одну колонку .

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

Можливо, у вашому випадку це точно відповідає предикатам у Фільтрі після сканування, де з’являється попередження.

Було б добре, якби SQL Server повідомив про всі стовпці для попередження про відсутність статистики, але, на жаль, це не працює сьогодні.

Певна кількість спроб і помилок може знадобитися для ідентифікації статистики багато стовпців, яку потрібно створити для видалення попередження. Зауважте, що статистику багато стовпців неможливо створити автоматично. Незважаючи на попередження, ви можете чи не можете знайти якість оцінки, яка покращується, навіть якщо статистику не вистачає.


8

Оскільки здається зрозумілим, що для конкретного стовпця вже існує статистика, я пропоную дві можливості:

  1. Провідник об’єктів вказується на іншу базу даних - я підозрюю, оскільки база даних має DEVім'я, тому можливо, що в одному випадку ви дивитесь на розробник, а в іншому - ні.
  2. План, який використовується, починається з моменту створення статистики (або вона була створена раніше, або, що менш ймовірно, щось заважало спрацьовувати перекомпіляцію, коли була створена статистика).

Будь ласка, підтвердіть, що проста відповідь (1) не є проблемою, і спробуйте OPTION (RECOMPILE)подати той самий запит, щоб підтвердити або виключити (2).


1
Аарон Бертнанд, дякую за вашу відповідь. Але Провідник об’єктів вказується на поточний db, а додавання OPTION (RECOMPILE) не виправляє проблему. Хочу також додати, що мій запит виконує збережену процедуру.
Арташес Хачатрян

2

Я щойно помітив, що коли ви отримуєте такі попередження про статистику, якщо ви запускаєте запит чи процедуру з налаштуваннями нижче:

SET SHOWPLAN_ALL ON

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

Ви можете побачити, які статистичні дані відсутні:

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

та використовуючи тут скрипти, ви можете ознайомитись із наявними статистичними даними, а якщо їх немає, ви можете додати їх.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.