聚集列存储索引(CC Index)是 SQL Server 2014 中两大最引人瞩目的特性之一,设计为用于超过 1 千万条记录的数据表。使用者无需明确的指定索引,也能够保证分析式查询的优良性能。
但 2014 版本中的这一特性存在着一个缺陷,即使用者无法指定索引。虽然 CC 索引比起传统表的表扫描要快得多,但它还是及不上经手动调整的覆盖索引。因此,为了同时支持这两种模式,开发者不得不创建两张表:一张具有 B 树索引结构的普通表,以及一个使用了聚集列存储索引的表。显然,保持这两张表的同步是一个很大的挑战。
在 SQL Server 2016 中,这个问题将不复存在。在兼容级别130(即SQL Server 2016)中的聚集列存储索引可包含B 树风格的二级索引,与传统的数据表一样。这种索引支持任何数量的列,并且可以进行筛选。
聚集列存储索引的另一个问题在于缺乏对于主键和外键的支持。由于数据库无法强制某个CC 索引的引用完整性,只能由中间层的开发者保证不会出现数据损坏的情况。如今因为能够在CC 索引中加入B 树索引,使用者就能够“使用一个B 树索引创建主键与外键,从而实现这些限制条件的强制实施”。
警告:“一旦为聚集列存储索引定义了B 树索引,就不能够使用MERGE 了。”
隔离级别
从SQL Server 2016 开始,CC 索引支持快照与读提交快照两种隔离级别了,因而无需再使用读- 写锁,也使得频繁写入数据的表的性能表现更为出色。
索引碎片整理
在SQL Server 2014 中的CC 索引被设计为主要用于添加数据风格的操作。虽然也能够对记录进行修改和删除操作,但这会产生索引碎片,只有通过重建整个CC 索引才能够消除这些碎片。而在2016 中,可以通过重新组织索引操作减少碎片。索引的重新组织是一种在线操作,这表示它无需长时间占有锁,因此妨碍对表的查询操作。
批量模式的增强
由于CC 索引与非聚集列存储索引使用了相同的存储引擎,因此它的批量模式也同样得到增强。
查看英文原文: SQL Server 2016: Clustered Columnstore Index Enhancements
感谢张龙对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。
评论