在外键列上创建对齐的索引



我有一个事实表,它沿着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 表数据。

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

这里的最佳实践决定了什么?

我的问题是:我应该按照什么顺序将这两列放在上面的索引中?

(OrderID,PeriodDate(索引用于检索一组给定订单ID的所有事实,如果您的分区中有多个PeriodDate,那么将索引与PeriodDate放在第一位,将没有那么大帮助。

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

我的维度将有十几行或最多一百行。事实数据表将有数百万行。 是否值得创建此索引?

你必须测试。 这实际上取决于查询。 但是,如果事实数据表是聚集列存储(具有数百万行的事实数据表通常应该是聚集列存储(,则可能会发现索引不常用于查询工作负荷。即,它可以用于单个产品的查询,但不能用于按非关键产品属性筛选的查询。

最新更新