在 SQL Server 2016 之前,对列存储索引进行分区被认为是强制性的,因为在插入/更新/删除期间对它们采取的锁定非常严格。但是,从 SQL Server 2016 开始,对列存储索引采取的锁定强度要小得多。那么,为什么对它们进行分区仍然被认为是最佳实践呢?
我知道一个技巧,你可以通过切换分区、构建聚集行存储索引、用列存储替换该索引,然后切换回该分区来改善对齐。然而,这只是一个温和的性能优化,很少能在重建后幸存下来,而且SQL Server 2022 的排序功能在很大程度上使其变得多余。
列存储已按行组“分区”。
分区可以为您提供隐式行组分区之外的额外消除级别。这比平常更重要,因为列存储不直接支持查找。
它为每个分区提供增量存储,而不是为表中的所有行提供增量存储。如果有重大更新,这有助于保留消除优势。您确实需要跟上维护,以确保增量存储中的行数不会失控(因为它们的数量更多)。
可以按分区执行索引维护。
您可以对不常用的分区选择存档压缩。
如果您建议的用途不会从分区中受益,请不要使用它。
相关问答:我应该为聚集列存储索引表创建多少个分区?我是否也应该对行存储表进行分区?
文档:列存储索引 - 设计指南
最后,不要对“有序列存储”太过兴奋。