欢迎来到天天文库
浏览记录
ID:49947185
大小:857.10 KB
页数:12页
时间:2020-03-04
《SQL Server列式存储的原理及应用.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于SQLServer列式存储的原理及应用演讲人:周欣2016.12目录一、列存储的原理什么是列存储列存储技术的主要特征列存储的过程二、列存储的应用范围列存储索引的种类为什么使用列存储何时应使用列存储三、列存储的应用如何创建列存储索引与行存储的性能对比1.1什么是列存储在SQLServer里,“页”是数据存储的基本单位。记录数据时,在逻辑上组织为包含行和列的表,在物理上按列数据格式存储的数据,称为列存储。磁盘的每个“页”仅存储来自单列的值,一行数据存储在多个“页”内。由于单列的数据类型一致,使得数据压缩算法更加高效,占用物理磁盘空间相对减少。一、列存储的原理1.2列存储技术
2、的主要特征•每次对一个列的数据进行分组和存储。SQLServer查询处理可以利用新的数据布局,并显著改进查询执行时间。•列存储索引由于以下原因而可更快地生成结果:◦多数查询并不会涉及表中的所有列,只需读取需要的列。因此,从磁盘读到内存、然后移到处理器缓存中的数据量减少了,同时减少总I/O。◦列经过了高度压缩。这将减少必须读取和移动的字节数。◦高级查询执行技术以简化的方法处理列块(称为“批处理”),从而减少CPU使用率。•如果基表为聚集索引,则聚集键中的所有列必须出现在非聚集列存储索引中。如果在CREATEINDEX语句中未列出聚集键中的某列,该列将自动添加到列存储索引中。•
3、使用表分区时,针对分区表的列存储索引必须与基表实现分区对齐。因此,如果分区列为列存储索引中的一列,则非聚集的列存储索引只能在已分区表上创建。一、列存储的原理1.3列存储的过程为获得高性能和高压缩率,列存储索引首先将表划分为由行构成的组,称为行组,然后按列切分,最后按列压缩每个行组(如下图)。其中部分不足以分组的数据,以传统行存储的形式存储,这就是所谓的“增量存储”(Deltastore),等数据增长到可以分组时再进行分组。“增量存储”仅用于聚集列存储索引,它是一个聚集索引,可以不断地存储行,并在行数达到某个阈值后,将行移入列存储,从而提高列存储压缩率和性能。为提高压缩率,行
4、组中的行数必须足够大,并且还要足够小,以便从内存中操作中受益。每个行组通常可包含的最大行数是1,048,576行,最小行数为102,400行。在“增量存储“达到最大行数后,它会关闭。元组移动进程会检查是否有已关闭行组。在它找到已关闭行组后,会对其进行压缩并且将其存储到列存储中。一、列存储的原理目录一、列存储的原理什么是列存储列存储技术的主要特征列存储的过程二、列存储的应用范围列存储索引的种类为什么使用列存储何时应使用列存储三、列存储的应用如何创建列存储索引与行存储的性能对比2.1列存储索引的种类列存储索引,SQLServer2012引入非聚集列存储索引;SQLServer2
5、014增加聚集列存储索引;SQLServer2016加强了聚集列存储索引的功能(使用者可指定索引;增加快照和读提交隔离级别;索引碎片整理;批量模式的增强)二、列存储的应用范围非聚集列存储索引聚集列存储索引创建条件对常用列建立索引不能基于视图或索引视图创建不能使用INCLUDE关键字创建——(没有键列。所有列均为包含列)列数限制包含的列数不能超过1024包含的列数不能超过1024索引的存储需要附加的存储空间以存储索引中列的副本索引本身包含数据更新索引只读索引,不支持插入、更新和删除操作。仅支持重新生成索引或者切入和切出分区进行更新可更新索引组合非唯一索引,可以与表中的其
6、他索引结合使用是表的唯一索引。不能与任何其他索引组合使用不能作为主键或外键数据压缩可配置为使用列存储或列存储存档压缩可配置为使用列存储或列存储存档压缩排序存储不以排序方式物理存储列不以排序方式物理存储列2.2为什么使用列存储索引列存储索引可提供极高的数据压缩级别(通常是传统方法的7-10倍),从而明显降低数据仓库存储成本。此外,对于分析,它们提供的性能比btree索引高出一个量级,可对数据仓库最多提高10倍查询性能。它们是数据仓库和分析工作负载的首选数据存储格式。从SQLServer2016开始,可以使用列存储索引对操作工作负荷执行实时分析。列存储索引速度较快的原因•列存储
7、来自同一个域的值,并且通常具有相似的值,从而提高了压缩率。这可以最大程度地减少或消除系统中的IO瓶颈,同时大大减少内存占用量。•较高的压缩率通过使用更小的内存中空间提高查询性能。•批处理执行可同时处理多个行,通常可将查询性能提高2-4倍。•查询通常仅从表中选择几列,这减少了从物理介质的总I/O。二、列存储的应用范围2.3何时应使用列存储索引行存储索引最适合用于查找数据、搜索特定值的查询,或者针对较小范围的值执行的查询。可对事务工作负载使用行存储索引,因为这些工作负载往往需要进行表查找而不是表扫描。对于扫描大量数据(
此文档下载收益归作者所有