- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQLServer列式存储的原理及应用解读
基于SQL Server列式存储的原理及应用
演讲人:周欣
2016.12
目录
1.1 什么是列存储
在SQL Server里,“页”是数据存储的基本单位。记录数据时,在逻辑上组织为包含行和列的表,在物理上按列数据格式存储的数据,称为列存储。
磁盘的每个“页”仅存储来自单列的值,一行数据存储在多个“页” 内。由于单列的数据类型一致,使得数据压缩算法更加高效,占用物理磁盘空间相对减少。
一、列存储的原理
1.2 列存储技术的主要特征
?每次对一个列的数据进行分组和存储。SQL Server 查询处理可以利用新的数据布局,并显著改进查询执行时间。
?列存储索引由于以下原因而可更快地生成结果:
?多数查询并不会涉及表中的所有列,只需读取需要的列。因此,从磁盘读到内存、然后移到处理器缓存中的数据量减少了,同时减少总 I/O 。
?列经过了高度压缩。这将减少必须读取和移动的字节数。
?高级查询执行技术以简化的方法处理列块(称为“批处理”),从而减少 CPU 使用率。
?如果基表为聚集索引,则聚集键中的所有列必须出现在非聚集列存储索引中。 如果在 CREATE INDEX 语句中未列出聚集键中的某列,该列将自动添加到列存储索引中。
?使用表分区时,针对分区表的列存储索引必须与基表实现分区对齐。 因此,如果分区列为列存储索引中的一列,则非聚集的列存储索引只能在已分区表上创建。
一、列存储的原理
1.3 列存储的过程
为获得高性能和高压缩率,列存储索引首先将表划分为由行构成的组,称为行组,然后按列切分,最后按列压缩每个行组(如下图)。其中部分不足以分组的数据,以传统行存储的形式存储,这就是所谓的“增量存储” (Deltastore),等数据增长到可以分组时再进行分组。
“增量存储”仅用于聚集列存储索引,它是一个聚集索引,可以不断地存储行,并在行数达到某个阈值后,将行移入列存储,从而提高列存储压缩率和性能。为提高压缩率,行组中的行数必须足够大,并且还要足够小,以便从内存中操作中受益。每个行组通常可包含的最大行数是 1,048,576 行,最小行数为102,400 行。在“增量存储“达到最大行数后,它会关闭。 元组移动进程会检查是否有已关闭行组。 在它找到已关闭行组后,会对其进行压缩并且将其存储到列存储中。
一、列存储的原理
目录
2.1 列存储索引的种类
列存储索引,SQL Server2012引入非聚集列存储索引; SQL Server2014增加聚集列存储索引;SQL Server2016加强
了聚集列存储索引的功能(使用者可指定索引;增加快照和读提交隔离级别;索引碎片整理;批量模式的增强)
二、列存储的应用范围
非聚集列存储索引
聚集列存储索引
创建条件
对常用列建立索引不能基于视图或索引视图创建不能使用 INCLUDE 关键字创建
——(没有键列。所有列均为包含列)
列数限制
包含的列数不能超过 1024
包含的列数不能超过 1024
索引的存储
需要附加的存储空间以存储索引中列的副本
索引本身包含数据
更新索引
只读索引,不支持插入、更新和删除操作。仅支持重新生成索引或者切入和切出分区进行更新
可更新
索引组合
非唯一索引,可以与表中的其他索引结合使用
是表的唯一索引。不能与任何其他索引组合使用
不能作为主键或外键
数据压缩
可配置为使用列存储或列存储存档压缩
可配置为使用列存储或列存储存档压缩
排序存储
不以排序方式物理存储列
不以排序方式物理存储列
2.2 为什么使用列存储索引
列存储索引可提供极高的数据压缩级别(通常是传统方法的 7-10 倍),从而明显降低数据仓库存储成本。
此外,对于分析,它们提供的性能比 btree 索引高出一个量级,可对数据仓库最多提高 10 倍查询性能。 它们是数据仓库和分析工作负载的首选数据存储格式。 从 SQL Server 2016 开始,可以使用列存储索引对操作工作负荷执行实时分析。
列存储索引速度较快的原因
?列存储来自同一个域的值,并且通常具有相似的值,从而提高了压缩率。 这可以最大程度地减少或消除系统中的 IO 瓶颈,同时大大减少内存占用量。
?较高的压缩率通过使用更小的内存中空间提高查询性能。
?批处理执行可同时处理多个行,通常可将查询性能提高 2-4 倍。
?查询通常仅从表中选择几列,这减少了从物理介质的总 I/O。
二、列存储的应用范围
2.3 何时应使用列存储索引
行存储索引最适合用于查找数据、有哪些信誉好的足球投注网站特定值的查询,或者针对较小范围的值执行的查询。 可对事务工作负载使用行存储索引,因为这些工作负载往往需要进行表查找而不是表扫描。
对于扫描大量数据(尤其是大型表中)的分析查询,列存储索引可提高性能。 可对数据仓库和分析工作负载(尤其是对事实数据表)使用列
文档评论(0)