时间:2021-07-01 10:21:17 帮助过:23人阅读
2:行聚集索引转换为列存储:
CREATE TABLE maxiangqian( id [int] NOT NULL, age [int] NOT NULL, sex [tinyint] NOT NULL, name varchar(20)); GO CREATE CLUSTERED INDEX cl_simple ON maxiangqian (id); GO CREATE CLUSTERED COLUMNSTORE INDEX cl_simple ON maxiangqian WITH (DROP_EXISTING = ON);
或者说我们也可以直接删除聚集索引,然后再
CREATE CLUSTERED COLUMNSTORE INDEX cl_simple ON maxiangqian
效果是一样一样的。
3 将一个堆表转化为列存储表:
第一步就是删除堆表现有的索引,然后创建聚集列存储索引:
CREATE TABLE maxiangqian( id [int] NOT NULL, age [int] NOT NULL, sex [tinyint] NOT NULL, name varchar(20)); GO create index pid on maxiagnqian(id) drop index pid on maxiangqian CREATE CLUSTERED COLUMNSTORE INDEX cci_Simple ON maxiangqian; GO :
上面基本上已经满足你建立列存储的一些功能,下面我们看一下怎么把一个聚集列存储的表转化为普通表:
CREATE CLUSTERED INDEX pid ON maxiangqian WITH ( DROP EXISTING = ON ); 或者 DROP INDEX cci_Simple ON MyFactTable;
OK,我们基本上已经可以知道怎么创建列存储索引了
但是我们指导由于列存储删除的时候只是标记,所以说列存储如果经常更新删除,碎片还是会很大的,下面我们看下怎么消除碎片---重建:
CREATE CLUSTERED COLUMNSTORE INDEX cci_Simple ON maxiagnqian WITH ( DROP_EXISTING = ON ); ALTER INDEX cci_Simple ON maxiangqian REBUILD PARTITION = ALL WITH ( DROP_EXISTING = ON );
以上两种方式是都可以实现的。
其实对于列存储来说,卧铺,我这边给我比较大的惊喜就是磁盘空间的节约,列存储的压缩比例可以达到10:1甚至15:1,而且相对来说对于我数据仓库一些大批量的聚合操作性能提升。在节省空间又提高性能的情况下,你还有什么理由不选用列存储呢。
SQL Server 2014 聚集列存储
标签:uil lte cci b-tree drop dex 升级 提升 维护