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