在外键列上创建对齐索引

Create aligned index on a foreign key column

我有一个事实 table,它沿着 PeriodDate 列划分。

CREATE TABLE MyFactTable
(
    PeriodDate DATE,
    OrderID INT 
         CONSTRAINT MyFk FOREIGN KEY (OrderID) REFERENCES DimOrder(ID)
)

我想在 OrderID 列上创建一个 分区对齐索引 ,正如我从 BOL 了解到的那样,我需要包含分区键 (PeriodDate) 以便索引对齐。

像这样:

CREATE NONCLUSTERED INDEX MyAlignedOrderIdIndex 
ON MyFactTable (OrderID, PeriodDate);

我的问题是:上面索引中的两列应该按什么顺序排列?

  1. ON MyFactTable (OrderID, PeriodDate);

  1. ON MyFactTable (PeriodDate, OrderID);

正如我在 BOL 上阅读的那样以及复合索引中的顺序问题,我的查询通常会使用 OrderID 来查找 Dim table 数据。

第一个 OrderID, PeriodDate 顺序似乎是合乎逻辑的选择,但由于我不熟悉分区,所以我不知道当 table 有数百万行时它将如何 "like it" 。

这里的最佳做法是什么?

My question is: In what order should I put the two columns in the index above?:

(OrderID,PeriodDate) 该索引用于检索给定的一组 OrderID 的所有事实,如果您的分区中有多个 PeriodDate,则首先使用 PeriodDate 的索引不会像有帮助。

这里的一般经验法则是不要按前导列进行分区。这样您就可以将分区消除和索引顺序作为完全独立的访问路径。

My dimension will have a dozen or maximum a hundred rows. The fact table will have millions of rows. Does it worth to create this index?

您必须进行测试。这真的取决于查询。但是,如果您的事实 table 是一个聚集的 columnstore(具有数百万行的事实 table 通常应该是),您可能会发现索引在查询中使用不多工作量。即它可能用于查询单个产品,但不适用于按非关键产品属性过滤的查询。