SQL Server 2008 отфильтрованные индексы - PullRequest
3 голосов
/ 26 ноября 2009

Я бы хотел понять функцию фильтрованного индекса SQL Server 2008.

Как работает компонент Database Engine с этой концепцией? И как это поможет мне получить более быстрые результаты, чем стандартные индексы, при запросе больших таблиц?

Кто-нибудь может мне помочь в этом?

Спасибо.

Ответы [ 2 ]

8 голосов
/ 26 ноября 2009

Это предложение WHERE в вашем индексе.

Мои реальные планы на миллионную таблицу строк:

  • Мне нужен индекс для столбца в таблице, но 90% значений имеют значение NULL. Мне нужен индекс для ненулевого 10%, но индекс раздут с 90% NULL. Поэтому я добавляю фильтр и экономлю место.

  • Я хочу присвоить уникальный столбец (например, уникальный только для значения NON-NULL). До SQL Server 2008 мне приходилось использовать индексированное представление или код. Теперь «ГДЕ» позволяет мне применять уникальные значения с помощью индекса

3 голосов
/ 26 ноября 2009

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

Если ваш запрос запрашивает значения, все из которых попадают в ограничение, то движок знает, что он может использовать отфильтрованный индекс вместо возврата к другому индексу / базовой таблице. Если вы запросите значения вне ограничения, отфильтрованный индекс не будет использоваться.

С точки зрения того, как это делает вашу систему быстрее, индекс может быть очень целевым и занимать меньше страниц в целом, чем эквивалентный индекс NC для тех же значений. это в основном дает вам меньше операций ввода-вывода и приводит к увеличению скорости. Даже при поиске индекса в фильтрованном индексе вы с большей вероятностью получите попадание в кэш страницы для индекса, поскольку фильтрованный индекс включает только те строки, которые были вам интересны (теоретически) из-за ограничения.

Если ваши распределения данных и запросы не соответствуют определенным шаблонам использования, вам будет сложнее заставить их работать, но в сценариях, где у вас много нулевых значений, которые вас никогда не интересуют, тогда можно установить отфильтрованный индекс например, могут включать только ненулевые значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...