技术开发 频道

SQL Server 2014在列存储索引中的改进

  【IT168 专稿】列存储索引在SQL Server 2012中首次引入,该技术能够将数据仓库的查询性能提升数倍。不同于普通的索引或堆采用B-Tree结构(以行的形式),列存储索引以列的形式存储数据,并使用主动压缩以减少查询请求所需的磁盘I/O。但是在SQL Server 2012中列存储索引仍有很多限制,SQL Server 2014中增强了该技术,并打破之前版本的限制。在本文中笔者将会介绍SQL Server 2014中最新增强的列存储索引技术的特征。

  SQL Server 2014相对于SQL Server 2012在列存储索引技术中有哪些改进?

  列存储索引的设计目标是加快通用数据仓库的查询速度,这些数据仓库需要扫描、聚合和过滤大量数据,或者将多个表格连接成星型结构(主要执行批量加载和只读查询)。SQL Server 2014破除了很多在SQL Server 2012中存在的限制:

  ·SQL Server 2012中用户在表里只能创建非聚簇列存储索引,在单一索引中包含表中所有列。SQL Server 2014增加了对创建聚簇列存储索引的支持。

  ·SQL Server 2012中用户在创建列存储索引时,该表格为只读模式。在SQL Server 2014创建列存储索引时不会影响表的写入功能,这意味着用户可以在一个有列存储索引的表中发出INSERT、UPDATE、DELETE等指令。

  列存储索引、ALTER INDEX … REBUILD新增一个COLUMNSTORE_ARCHIVE数据压缩选项,能够进一步压缩列存储索引的指定分区,使用更少的磁盘空间。用户可以在归档或者需要更小数据存储容量时选择此选项,但存储和检索过程会花费更多时间。

  SQL Server 2014列存储索引入门

  下面是创建聚簇列存储索引和非聚簇列存储索引的基本语句。更详细的内容,请点击此处

--创建一个聚簇列存储索引
CREATE CLUSTERED COLUMNSTORE   INDEX index_name
      
ON table_name
      
WITH ( DROP_EXISTING OR MAX_DOP)
      
ON partition_scheme_name   | filegroup_name   | default

 

--创建一个非聚簇列存储索引
CREATE NONCLUSTERED COLUMNSTORE   INDEX index_name  
      
ON table_name   COLUMN columns_name
      
WITH ( DROP_EXISTING OR MAX_DOP)
      
ON partition_scheme_name   | filegroup_name   | default

  通常情况下,用户在行存储中创建聚簇索引时,需要指定将要成为聚簇索引部分的列。而聚簇列存储索引包括表里的所有列,也是存储整个表的方法。这就是在以上语句中没有为聚簇列存储索引指定列的原因。

  以下要点需要注意:

  ·在SQL Server 2014中,用户仍然可以像在SQL Server 2012中那样创建一个非聚簇列存储索引,但是这个非聚簇列存储索引是只读查询,无法更新。只有聚簇列存储索引才可以更新。

  ·创建用户可以在企业版、开发者版和评估版本中创建聚簇列存储索引,一旦创建就不能有任何形式的非聚簇索引、唯一约束、主键约束和外键约束。

  ·如果表中有一个非聚簇列存储索引,用户可以创建唯一约束、主键约束和外键约束,但约束不包括在非聚簇列存储索引中。

  ·要改变非聚簇列存储索引的定义,用户必须删除并重新创建非聚簇列存储索引取代旧索引,不适用ALTER INDEX语句。但是可以使用ALTER INDEX禁用和重建列存储索引。

  ·当用户创建非聚簇列存储索引时,不能包括稀疏列,也不能使用INCLUDE、ASC、 DESC语句。

  ·当用户创建聚簇列存储索引时,索引本身包含数据;而在非聚簇存储索引的情况下,需要辅助存储器存储非聚簇列存储索引中列的副本。

  ·聚簇列存储索引(唯一索引)不能与其他索引结合,而在非聚簇列存储索引的情况下,表中可以创建其他索引。

  总结

  本文中,笔者介绍了聚簇列存储索引的基础知识、优势、与非聚簇列存储索引的对比,以及如何开始创建。在下篇文章中,笔者将会介绍不同概念、关键术语和列存储索引内部运作的更多细节,并提供一些实例和性能测试。

  原文链接:New Enhanced Column Store Index in SQL Server 2014 – Part 1

0
相关文章