不对索引进行分区对齐是否有好处?


9

我有管理大型分区OLAP表的特权。在查看此表时,我注意到其中一个索引与分区方案不符。由于作者不可用且精心设计的Google搜索未返回任何有用的结果,因此我不确定这是故意的还是偶然的。

有什么理由不对SQL Server 2008上的索引进行分区对齐吗?


1
可能吧 查询索引统计信息的使用情况以查看是否正在使用该索引。如果是这样,请使用扩展事件或服务器端跟踪来捕获正在查询该索引的查询。如果它们在分区对齐的索引上表现更好,那就太好了。如果不是,请检查它们是否确实需要未对齐的分区索引。如果他们不这样做,我想说它还是按分区对齐,因为将来的查询可以利用它。当然,如果成本/努力/中断太高,那就不要。
阿里·拉泽吉

根据我所读的对分区表建立索引的最佳实践,是将索引与分区方案对齐。这个特定的表让我想到我想了解一个用例,以使索引不与分区方案对齐。我没有尝试解决特定的问题,因此我没有需要分析的查询。
罗宾

设计不对齐索引的另一个原因是不包含分区列的唯一索引(包括主键或唯一约束)。在这种情况下,必须完全不对索引进行分区,也不能使用其他函数/方案对索引进行分区。
丹·古兹曼

Answers:


11

分区基础对象未分区的(非唯一)指数的主要优点是,它围绕着一个长期的查询优化器的限制与排序的数据请求,例如MINMAXTOP (n)查询。

在分区索引上,优化器通常无法将MINMAX每个分区TOP (n)转换为相同的操作,而不能在每个分区的部分聚合上进行最终的全局聚合。相反,优化器选择一个执行计划,该计划将扫描索引的所有分区。唯一的例外是在分区列上指定了合计或顶级操作。

我应该提到,也有很好的理由不包含任何非对齐索引。选择使用不对齐索引将是一个非常明智的选择。我过去(很少)自己做过,但是在非常特殊的情况下,收益明显超过了成本,或者没有其他合理的选择。


Itzik Ben-Gan的文章解释了这个问题。


3

围绕一些需要不对齐索引的约束(例如唯一性)存在一个明显的问题。

除此之外,非对齐索引的开销很大(主要是它们防止许多并行运算符按分区运行线程,而替代方案则使内存昂贵),因此,我强烈建议不要使用此类索引。即使有Paul列出的案例,我仍然建议不要使用不对齐的索引。


1
是。选择不对齐的索引将是一个非常明智的选择。过去,我自己(很少)这样做,但是在非常特殊的情况下,收益大于成本。
保罗·怀特9

2

不对齐索引会否决分区的主要好处,即切换分区。如果您不依赖于此并且由于其他原因而进行分区(不同的存储,只读分区,增量统计信息等),请继续创建不对齐的indexex。

非对齐索引很有用,因为您可以使用它们在整个表上实施唯一约束。同样,非对齐索引不需要分区键为隐式查找前缀。想象一下有10000个分区,并且不基于分区键进行查询。如果索引对齐,则执行计划将必须搜索10000个分区。其他答案还有其他示例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.