Итак, для этого одного проекта у нас есть набор запросов, которые выполняются на регулярной основе (каждую минуту или около того. Я использовал «Анализировать запрос в ядре СУБД», чтобы проверить их.
Они довольно простые: выберите * из таблицыx, где обработано = '0'
Есть индекс по обработанным, и каждый запрос должен возвращать <1000 строк в таблице с 1MM записями.
Анализатор рекомендовал создать некоторую СТАТИСТИКУ по этому поводу .... Итак, мой вопрос: что это за статистика? они действительно помогают производительности? насколько они дороги для стола, как указано выше?
Имейте в виду, что я ни в коем случае не назову себя опытным пользователем SQL Server ... И это первый раз, когда я использую этот Анализатор.





В Sql Server 2005 установите автоматическое создание статистики и автоматическое обновление статистики. Вам не придется беспокоиться о их создании или обслуживании самостоятельно, поскольку база данных сама с этим справляется.
Статистика - это то, что 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 мог определить, имеет ли смысл создавать временный индекс для возврата данных.
HTH