Статистика — это то, что 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