SQL Server СТАТИСТИКА - PullRequest
       6

SQL Server СТАТИСТИКА

14 голосов
/ 09 октября 2008

Итак, для этого одного проекта у нас есть несколько запросов, которые выполняются регулярно (каждую минуту или около того. Я использовал «Анализ запросов в Database Engine», чтобы проверить их.

Они довольно простые: выберите * из таблицы, где обработано = '0'

Существует обработанный индекс, и каждый запрос должен возвращать <1000 строк в таблице с записями 1 мм. </p>

Анализатор рекомендовал создать некоторые СТАТИСТИКИ для этого .... Итак, мой вопрос: что это за статистика? они действительно помогают производительности? насколько они дорогие для стола, как указано выше?

Пожалуйста, имейте в виду, что я ни в коем случае не назову себя опытным пользователем SQL Server ... И этот анализатор используется впервые.

Ответы [ 2 ]

24 голосов
/ 09 октября 2008

Статистика - это то, что SQL Server использует для определения жизнеспособности способа получения данных.

Допустим, например, что у вас есть таблица, в которой только первичный ключ имеет кластерный индекс. Когда вы выполняете SELECT * FROM tablename WHERE col1=value, SQL Server имеет только одну опцию - сканировать каждую строку в таблице, чтобы найти соответствующие строки.

Теперь мы добавляем индекс к столбцу col1, поэтому вы предполагаете, что SQL Server будет использовать индекс для поиска подходящих строк, но это не всегда так. Предположим, что таблица имеет 200 000 строк, а col1 имеет только 2 значения: 1 и 0. Когда SQL Server использует индекс для поиска данных, он содержит указатели на позицию кластерного индекса. Поскольку в индексированном столбце есть только два значения, SQL Server решает, что имеет больше смысла просто сканировать таблицу, поскольку использование индекса будет более трудоемким.

Теперь мы добавим еще 800 000 строк данных в таблицу, но на этот раз значения в col1 сильно различаются. Теперь это полезный индекс, потому что SQL Server может использовать этот индекс для ограничения того, что ему нужно извлечь из таблицы. Будет ли SQL Server использовать индекс?

Это зависит. И от этого зависит статистика. В какой-то момент времени с включенным AUTO UPDATE STATISTICS сервер обновит статистику для индекса и узнает, что это очень хороший и правильный индекс для использования. Однако до этого момента он будет игнорировать индекс как несущественный.

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

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

НТН

0 голосов
/ 09 октября 2008

В Sql Server 2005 установите автоматическое создание статистики и автоматическое обновление статистики. Вам не придется беспокоиться о том, чтобы создавать их или обслуживать их самостоятельно, так как база данных сама справляется с этим очень хорошо.

...