你能看看我下面的数据仓库索引(SQL Server 2014 SP1 Ent)方法并告诉我它是正确的还是我应该改变它?(我们的数据仓库大部分时间用于 SSAS Cube,有时用于直接报告)
我的索引方法:
- 所有主键(在维度表中)都有一个聚簇索引
- 对于更大的维度表(50k+ 行),我为每个经常使用的列提供了一个专用的非聚集索引
- 所有事实表都实现了 PK 聚簇索引(在单个非 FK 列上,如 FactTableKey)——但我认为不应将其放置在那里
- 所有外键(在事实表中)都有一个专用的非聚集索引(其中每个 FK 列)
- 此外,我正在考虑在 Fact 表上实施 CLUSTERED COLUMNSTORE INDEX,而不是为每个 FK 实施许多非聚集索引 - 但在这种情况下,我认为这是不推荐的解决方案
此外,在我使用 Visual Studio SSDT 的测试实验室中,我尝试将 CCI 索引放在属于 FILEGROUP 的事实表上,但我收到一条错误消息,提示我无法在属于 FILEGROUP 的表上使用 CCI。奇怪的是我可以直接从 SSMS 创建这样的 CCI。Visual Stusio 问题或 SSMS 错误?
您提到您为事实表中的每个外键添加了单列索引。通常至少有一些外键的基数较低,因此它们可能在索引中没有用处。 https://www.ibm.com/developerworks/data/library/techarticle/dm-1309cardinal/
它们作为多列索引的一部分可能更有用,您可以根据您希望用户查询表的方式来设计多列索引。
如果您的工作负载适合,那么应该考虑在大维度表和事实表上使用非聚集列存储索引。它们非常适合数据仓库工作负载。http://www.nikoport.com/2016/03/07/columnstore-indexes-part-79-loading-data-into-non-updatable-nonclustered-columnstore/
由于您使用的是 2014,因此如果您想保留约束和其他索引,那么非集群是唯一的选择。