我的数据仓库中有一个包含 300M+ 行的表,非常适合聚集列存储索引,但我不确定如何应用它。
我应该创建一个带有列存储索引的表的空副本,然后将我的数据选择到其中,还是应该删除现有表上的所有普通索引并将列存储索引直接添加到其中?
我有 12 个 CPU 内核和 100GB 专用于 SQL Server 2019 的 RAM。我将在维护窗口期间进行更新,并将最大服务器资源分配给此任务。哪种添加索引的方法会更快?
我的数据仓库中有一个包含 300M+ 行的表,非常适合聚集列存储索引,但我不确定如何应用它。
我应该创建一个带有列存储索引的表的空副本,然后将我的数据选择到其中,还是应该删除现有表上的所有普通索引并将列存储索引直接添加到其中?
我有 12 个 CPU 内核和 100GB 专用于 SQL Server 2019 的 RAM。我将在维护窗口期间进行更新,并将最大服务器资源分配给此任务。哪种添加索引的方法会更快?
阅读 Microsoft 文档,我似乎将采用第三种方式。从 SQL Server 2016 开始,您不必删除现有索引,实际上它们对 ColumnStore 索引非常有用。
我要做的是在现有的“普通”行存储索引之上创建一个聚集列存储索引而不删除它们,并使用 DROP EXISTING 选项。
启用此选项后,SQL Server 使用现有的 RowStore 索引对 ColumnStore 中的数据进行排序,然后其行为就像常规索引一样。它甚至保留索引的名称并保留所有现有的元数据和统计信息。使用现有索引的执行计划将继续有效。
这样我就不必牺牲我的聚集主键和我为某些查询调整的个人索引所获得的单值查找性能,它们只是被合并到列存储中并继续可用!极好的!