Какова цель автоматического создания статистики для неиндексированного столбца? - PullRequest
1 голос
/ 14 июня 2019

На сервере SQL создание индекса автоматически создает объект статистики для этого индекса и использует его для определения наилучшего плана выполнения запроса.

Кроме того, объект статистики автоматически создается для столбцов, используемых в предложении WHERE - например:

SELECT *
FROM AWSales 
WHERE ProductID = 898

Приведенный выше запрос автоматически создает объект статистики для ProductID. Какой цели это служит?

Поскольку неиндексированный столбец не отсортирован и не является структурой B-дерева, то как статистика помогает выбрать план запроса лучше, чем сканирование таблицы?

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

1 Ответ

2 голосов
/ 14 июня 2019

Служит для той же цели, что и статистика, созданная для индекса. Он будет использовать статистику для оценок, чтобы выбрать лучший план выполнения на основе времени ЦП и операций ввода-вывода. Будет выбран план с наименьшей стоимостью.

Когда индексы в таблице не покрывают столбец в предложении where, поэтому ProductID, в вашем примере, создаст статистику по столбцу, чтобы создать гистограмму, чтобы прослушать оценки для предоставленного вами значения, если только он не указан. уже есть кэшированный план.

В вашем плане выполнения вы можете увидеть, какую статистику двигатель использовал для выбора плана, просмотрев свойства объекта SELECT в плане (самый левый объект). Разверните свойство OptimizerStatsUsage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...