Как вы уже знаете, схема снежинки является основной формой в структурах данных хранилища данных. Такая схема обычно имеет одну таблицу фактов, которая связана с несколькими таблицами измерений. Таблица фактов может иметь 100 млн строк или более, тогда как таблица измерений содержит гораздо больше миллионов строк. Обычно при решениях поддержки запросов некоторые размеры таблиц объединяются с соответствующими таблицами фактов. Можно получить значительное увеличение производительности, если оптимизатор запросов сможет распознавать эти запросы и применять для этого особые техники. Использование таких техник в оптимизаторе запросов обычно называется оптимизацией StarSchema.
Давайте используем пример 26.8, где работает схема оптимизации запросов StarSchema.
Предыдущий пример является запросом, основанным на одной из схемы StarSchema для базы данных AdventureWorksDW. Оптимизатор запросов в SQL Server 2008 определяет StarSchema и находит таблицу фактов (FactlnternetSales) и соответствующие таблицы размеров (DimTime и DimProduct). Если результирующие наборы соответствующих операций соединения таблицы фактов с каждой таблицей размеров содержат небольшое или среднее количество строк, то оптимизатор запросов применяет так называемые битовые фильтры для применения операции полусоединения в начале запроса. (Определение полусоединения)
Основной ролью битовых фильтров является увеличение скорости параллельных планов за счет полусоединения, выполняющегося прежде, чем строки будут передаваться между операторами, относящимися к параллельному выполнению. Битовые фильтры не используются в последовательных планах.
SQL Server 2008 поддерживает следующие улучшения, связанные с битовыми фильтрами:
♦ для битовых фильтров существуют новые планы запросов;
♦ оптимизатор запросов может динамически изменять позицию битовых фильтров;
♦ поддержка множества битовых фильтров;
♦ оптимизатор запросов принимает решение, когда и как применять битовые фильтры.
Битовые фильтры видны в форме XML в плане выполнения. В этом случае XML-атрибуты Phisicaiop и LogicalOP содержат значения «Bitmap» и «Bitmap Create» соответственно. (Об определении атрибутов XML.)
В отличие от SQL Server 2005, оптимизатор запросов в SQL Server 2008 может динамически изменять позицию битового фильтра. (Преимущества производительности могут быть достигнуты, если битовые фильтры будут перемещены на более низкие уровни дерева запроса.) Также к запросу теперь может быть применено несколько битовых фильтров.
На решения оптимизатора запросов по отношению к оптимизации соединений не могут влиять пользователи. Иными словами, не существует системных процедур (или известных флагов трассировки), которые могли бы быть использованы для деактивации (или активации) этой возможности.