我有管理大型分区OLAP表的特权。在查看此表时,我注意到其中一个索引与分区方案不符。由于作者不可用且精心设计的Google搜索未返回任何有用的结果,因此我不确定这是故意的还是偶然的。
有什么理由不对SQL Server 2008上的索引进行分区对齐吗?
我有管理大型分区OLAP表的特权。在查看此表时,我注意到其中一个索引与分区方案不符。由于作者不可用且精心设计的Google搜索未返回任何有用的结果,因此我不确定这是故意的还是偶然的。
有什么理由不对SQL Server 2008上的索引进行分区对齐吗?
Answers:
分区基础对象未分区的(非唯一)指数的主要优点是,它围绕着一个长期的查询优化器的限制与排序的数据请求,例如MIN
,MAX
或TOP (n)
查询。
在分区索引上,优化器通常无法将MIN
,MAX
或每个分区TOP (n)
转换为相同的操作,而不能在每个分区的部分聚合上进行最终的全局聚合。相反,优化器选择一个执行计划,该计划将扫描索引的所有分区。唯一的例外是在分区列上指定了合计或顶级操作。
我应该提到,也有很好的理由不包含任何非对齐索引。选择使用不对齐索引将是一个非常明智的选择。我过去(很少)自己做过,但是在非常特殊的情况下,收益明显超过了成本,或者没有其他合理的选择。
Itzik Ben-Gan的文章解释了这个问题。
围绕一些需要不对齐索引的约束(例如唯一性)存在一个明显的问题。
除此之外,非对齐索引的开销很大(主要是它们防止许多并行运算符按分区运行线程,而替代方案则使内存昂贵),因此,我强烈建议不要使用此类索引。即使有Paul列出的案例,我仍然建议不要使用不对齐的索引。