使用非聚集列存储索引

介绍在SQL Server表上使用非聚集列存储索引的关键任务。

有关列存储索引的概述,请参阅 Columnstore Indexes Described

有关聚集列存储索引的信息,请参阅 Using Clustered Columnstore Indexes

目录

创建非聚集列存储索引

若要将数据加载到非聚集列存储索引中,请先将数据加载到存储为堆或聚集索引的传统行存储表中,然后使用 CREATE COLUMNSTORE INDEX (Transact-SQL) 创建列存储索引。

将数据加载到列存储索引

更改非聚集列存储索引中的数据

在您在表上创建非聚集列存储索引后,不能直接在该表中修改数据。 具有 INSERT、UPDATE、DELETE 或 MERGE 的查询将失败并且返回错误消息。 若要添加或修改表中的数据,可以执行以下操作之一:

  • 禁用列存储索引。 然后可以更新表中的数据。 如果禁用列存储索引,则可以在完成数据更新后重新生成列存储索引。 例如:

    ALTER INDEX mycolumnstoreindex ON mytable DISABLE;
    -- update mytable --
    ALTER INDEX mycolumnstoreindex on mytable REBUILD
    
  • 删除列存储索引,更新表,然后使用 CREATE COLUMNSTORE INDEX 重新创建列存储索引。 例如:

    DROP INDEX mycolumnstoreindex ON mytable
    -- update mytable --
    CREATE NONCLUSTERED COLUMNSTORE INDEX mycolumnstoreindex ON mytable;
    
    
  • 将数据加载到不含列存储索引的临时表中。 在临时表上生成列存储索引。 将临时表切换到主表的一个空分区中。

  • 将分区从具有列存储索引的表切换到一个空的临时表中。 如果在临时表上有某个列存储索引,则禁用该列存储索引。 执行任何更新。 生成(或重新生成)列存储索引。 将临时表切换回主表的(现在为空的)分区中。