【问题标题】:Improve performance of table with columnstore index in SQL Server使用 SQL Server 中的列存储索引提高表的性能
【发布时间】:2019-11-25 08:23:32
【问题描述】:

我有一个相当大的表(2000 万行),它有一个列存储索引。

当我尝试从中删除部分数据时,删除速度很慢,需要几分钟时间。

在列存储表中加快删除速度的选项是什么?添加常规索引是否有助于加快删除速度?我知道在列存储表中列存储索引已经物理存储在列中,所以我不确定添加更多索引是否会有所帮助。

【问题讨论】:

    标签: sql-server columnstore


    【解决方案1】:

    首先,2000 万条记录不算什么。你不需要为那几个数据提供列存储;普通索引就可以了。

    第二,列式存储,无论如何,在 MS SQL Server 中,都是只读的。这是设计使然。通过对数据进行分区并一次删除一个部分,您可能会在删除方面获得一些改进,但分区 20M 条记录肯定是大材小用。

    更糟糕的是,删除会在列存储组中产生碎片,因为与行存储不同,在您为该索引运行 rebuild / reorganize 之前,数据库引擎不会回收可用空间(选择哪一个取决于 SQL Server版本;详情请查看ALTER INDEX)。

    简而言之,只有在行存储不再削减列存储时才考虑列存储,而这显然不是您的情况(至少现在还不是)。

    【讨论】:

      【解决方案2】:

      尝试使用截断而不是删除。我有一张包含超过 4000 万条记录的表。该表上定义了非聚集索引。删除选项并不理想,因为它需要很长时间并且大量使用事务日志。因此我使用 truncate 解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-12
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 2014-03-26
        • 2018-11-19
        • 1970-01-01
        相关资源
        最近更新 更多