2016-06-14 91 views
-2

我有一個數據倉庫環境並且有一個關於索引的問題。我有一個標題事實表,然後連接到一個詳細級別的事實表。詳細的事實表然後加入到許多維度。SQL Server事實表索引

因此,我們有:

FactHeader 
FactDetail 

Dim1 
Dim2 
Dim3 
Dim4 

在我詢問我需要加入FactDetail所有維度表獲得的描述報告需求。

我有一個非集羣索引FactDetail.FactHeaderKey。我的問題是:我應該在這個非聚集索引中包含所有外鍵還是應該在外鍵上創建單獨的非聚集索引?如果我創建了單獨的索引,它將執行聚集索引掃描,它位於標識列上。

如果我創建一個非聚集索引,那麼它會進行索引查找,當然還會返回所有外鍵。對我來說,似乎我應該用include來做一個非聚集索引,但由於某種原因,這對我來說似乎沒有意義。

任何建議表示讚賞。

回答

0

因此,當您設計索引時,它將基於OLTP或OLAP。由於你的是一個數據倉庫,你的索引將基於OLAP。因此,在外鍵上創建單獨索引的規則適用於OLTP數據庫設計。由於OLAP主要用於數據檢索,因此您將主要針對查詢設計索引。索引體系結構非常重要,因爲它的價格很高,只是將所有列包含在B樹中。但是如果你的查詢在所有相關的表上都有一個連接,那麼是的,有一個非聚集索引與這些外鍵。