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

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

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

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

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

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


person webclimber    schedule 09.10.2008    source источник


Ответы (2)


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

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

Теперь мы добавим индекс к столбцу 1, поэтому вы предполагаете, что 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 мог определить, имеет ли смысл создавать временный индекс для возврата данных.

ХТН

person Josef    schedule 09.10.2008

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

person Eric Z Beard    schedule 09.10.2008