2016-06-14 3 views
-2

У меня есть среда хранилища данных и возникает вопрос об индексировании. У меня есть таблица фактов заголовка, которая затем присоединяется к таблице фактов уровня детализации. Затем таблица фактов деталей объединяется во многие измерения.Индексирование таблицы фактов SQL Server

Итак, мы имеем:

FactHeader 
FactDetail 

Dim1 
Dim2 
Dim3 
Dim4 

В моих запросах мне нужно присоединиться FactDetail ко всем таблицам измерений, чтобы получить описания для потребностей отчетности.

У меня есть некластеризованный индекс на FactDetail.FactHeaderKey. Мой вопрос: должен ли я включать все внешние ключи в этот некластеризованный индекс или мне нужно создавать отдельные некластерные индексы для внешних ключей? Если я создаю отдельные индексы, он выполняет кластерное сканирование индекса, которое находится только в столбце идентификации.

Если я создаю один некластеризованный индекс, то он ищет индекс и, конечно же, возвращает все внешние ключи вместе с ним. Мне кажется, что я должен просто сделать один некластеризованный индекс с включенным, но по какой-то причине это не имеет смысла для меня.

Любые предложения приветствуются.

ответ

0

Итак, при разработке индексов он основан на OLTP или OLAP. Поскольку ваш - хранилище данных, ваши индексы будут основаны на OLAP. Таким образом, правило с созданием отдельных индексов для внешних ключей предназначено для проектов баз данных OLTP. Поскольку OLAP в основном предназначен для поиска данных, вы будете проектировать свои индексы в основном по запросам. Индексная архитектура очень важна, потому что ее дорого стоит включить все столбцы в B-Tree. Но если ваш запрос имеет соединение во всех связанных таблицах, тогда да, у вас есть один некластеризованный индекс с этими внешними ключами.

Смежные вопросы