当前位置:Gxlcms > 数据库问题 > SQL Server 2014 聚集列存储

SQL Server 2014 聚集列存储

时间:2021-07-01 10:21:17 帮助过:23人阅读

TABLE maxiangqian( id [int] NOT NULL, age [int] NOT NULL, sex [tinyint] NOT NULL, name varchar(20)); GO CREATE CLUSTERED COLUMNSTORE INDEX cci_Simple ON maxiangqian; GO :

2:行聚集索引转换为列存储:

  1. <span style="color: #0000ff;">CREATE</span> <span style="color: #0000ff;">TABLE</span><span style="color: #000000;"> maxiangqian(
  2. 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;">,
  3. 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;">,
  4. 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;">,
  5. name </span><span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">));
  6. </span><span style="color: #0000ff;">GO</span>
  7. <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);
  8. </span><span style="color: #0000ff;">GO</span>
  9. <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
  10. </span><span style="color: #0000ff;">WITH</span> (DROP_EXISTING <span style="color: #808080;">=</span> <span style="color: #0000ff;">ON</span>);

或者说我们也可以直接删除聚集索引,然后再

  1. <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 将一个堆表转化为列存储表:

第一步就是删除堆表现有的索引,然后创建聚集列存储索引:

  1. <span style="color: #0000ff;">CREATE</span> <span style="color: #0000ff;">TABLE</span><span style="color: #000000;"> maxiangqian(
  2. 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;">,
  3. 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;">,
  4. 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;">,
  5. name </span><span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">));
  6. </span><span style="color: #0000ff;">GO</span>
  7. <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)
  8. </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
  9. </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;
  10. </span><span style="color: #0000ff;">GO</span> :

上面基本上已经满足你建立列存储的一些功能,下面我们看一下怎么把一个聚集列存储的表转化为普通表:

  1. <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
  2. </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;"> );
  3. 或者
  4. </span><span style="color: #0000ff;">DROP</span> <span style="color: #0000ff;">INDEX</span> cci_Simple <span style="color: #0000ff;">ON</span> MyFactTable;

OK,我们基本上已经可以知道怎么创建列存储索引了

但是我们指导由于列存储删除的时候只是标记,所以说列存储如果经常更新删除,碎片还是会很大的,下面我们看下怎么消除碎片---重建:

  1. <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
  2. </span><span style="color: #0000ff;">WITH</span> ( DROP_EXISTING <span style="color: #808080;">=</span> <span style="color: #0000ff;">ON</span><span style="color: #000000;"> );
  3. </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>
  4. <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   升级   提升   维护   

人气教程排行