【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列存储索引入门
下面是创建聚簇列存储索引和非聚簇列存储索引的基本语句。更详细的内容,请点击此处。
ON table_name
WITH ( DROP_EXISTING OR MAX_DOP)
ON partition_scheme_name | filegroup_name | default
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