Что такое статистика базы данных и как я могу извлечь из нее пользу?


18

Я слышал упоминание о статистике, которую SQL Server хранит по умолчанию. Что они отслеживают, и как я могу использовать эту информацию для улучшения своей базы данных?

Ответы:


21

Статистика просто является формой динамических метаданных, которая помогает оптимизатору запросов принимать более правильные решения. Например, если в таблице всего дюжина строк, то нет смысла обращаться к индексу для поиска; вам всегда будет лучше делать полное сканирование таблицы. Но если эта же таблица вырастет до миллиона строк, то вам, вероятно, будет лучше использовать индекс. Но если вы запрашиваете эту таблицу в столбце, который имеет очень мало уникальных значений (например, это может быть столбец «sex», содержащий только «M» или «F»), то на самом деле FTS может быть лучше этого случая, потому что вы бы все равно нужно получить блок, чтобы построить набор результатов. Теперь скажите, что ваша таблица на 99% «М» и только на 1% «F», в одном случае мы должны использовать FTS или использовать индекс в другом. Та же таблица, тот же запрос, потенциально четыре разных плана запроса в зависимости от содержимого таблицы. Такие вещи являются «статистикой», и они индивидуальны для каждой базы данных - даже две базы данных с идентичной таблицей и структурой индекса будут иметь разную статистику.

Таким образом, в современном движке баз данных существует два вида оптимизации запросов: переписывание SQL (оптимизация на основе правил, как компилятор переписывает ваш C, чтобы сделать его более эффективным) и выбор правильного пути для данных (оптимизация на основе затрат) как компилятор JIT, идентифицирующий горячие точки во время выполнения). Вам следует беспокоиться об этом, только если вы заметите, что оптимизатор запросов делает что-то явно неправильное (например, выбирая FTS, когда вы знаете, что индекс лучше).


2
+1 Я не мог бы объяснить это лучше. Важно помнить, что статистика полезна, только если она обновляется. Это можно сделать с помощью автоматического обновления статистики или команды регулярного (еженедельного / еженедельного) обновления статистики. Кроме того, перестройки индекса будут автоматически выполнять обновление статистики.
Мэтт М

5

Они используются оптимизатором запросов (технический документ на MSDN) для отслеживания распределения значений в индексах и / или столбцах.

Ваша единственная забота должна регулярно обновляться : просто оставьте движок БД, чтобы делать свое дело


2
Не всегда. Бывают случаи, когда создание статистики вручную может помочь повысить производительность запросов.
Мрденный

@mrdenny: Как часто ты делал это в реальной жизни? Очень редко. У меня нет IIRC. Если ему нужна статистика, можно утверждать, что ей нужен индекс, который в любом случае имеет статистику. Вы можете создавать статистику столбцов только в соответствии с CREATE STATISTICS . Учитывая, что ОП пришлось спросить о статистике, я бы сказал, что это справедливо.
ГБН

1
Я делал это пару раз, но не часто. Я был против вашего заявления «Ваша единственная задача - регулярно обновлять», поскольку обновление статистики - не единственное.
Мрденный
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.