Я слышал упоминание о статистике, которую SQL Server хранит по умолчанию. Что они отслеживают, и как я могу использовать эту информацию для улучшения своей базы данных?
Я слышал упоминание о статистике, которую SQL Server хранит по умолчанию. Что они отслеживают, и как я могу использовать эту информацию для улучшения своей базы данных?
Статистика просто является формой динамических метаданных, которая помогает оптимизатору запросов принимать более правильные решения. Например, если в таблице всего дюжина строк, то нет смысла обращаться к индексу для поиска; вам всегда будет лучше делать полное сканирование таблицы. Но если эта же таблица вырастет до миллиона строк, то вам, вероятно, будет лучше использовать индекс. Но если вы запрашиваете эту таблицу в столбце, который имеет очень мало уникальных значений (например, это может быть столбец «sex», содержащий только «M» или «F»), то на самом деле FTS может быть лучше этого случая, потому что вы бы все равно нужно получить блок, чтобы построить набор результатов. Теперь скажите, что ваша таблица на 99% «М» и только на 1% «F», в одном случае мы должны использовать FTS или использовать индекс в другом. Та же таблица, тот же запрос, потенциально четыре разных плана запроса в зависимости от содержимого таблицы. Такие вещи являются «статистикой», и они индивидуальны для каждой базы данных - даже две базы данных с идентичной таблицей и структурой индекса будут иметь разную статистику.
Таким образом, в современном движке баз данных существует два вида оптимизации запросов: переписывание SQL (оптимизация на основе правил, как компилятор переписывает ваш C, чтобы сделать его более эффективным) и выбор правильного пути для данных (оптимизация на основе затрат) как компилятор JIT, идентифицирующий горячие точки во время выполнения). Вам следует беспокоиться об этом, только если вы заметите, что оптимизатор запросов делает что-то явно неправильное (например, выбирая FTS, когда вы знаете, что индекс лучше).
Они используются оптимизатором запросов (технический документ на MSDN) для отслеживания распределения значений в индексах и / или столбцах.
Ваша единственная забота должна регулярно обновляться : просто оставьте движок БД, чтобы делать свое дело
источник