解读SQL Server 2014可更新列存储索引——存储机制
时间:2022-03-10 17:13
概述
SQL Server 2014被号称是微软数据库的一个革命性版本,其性能的提升的幅度是有史以来之最。
可更新的列存储索引作为SQL Server 2014的一个关键功能之一,在提升数据库的查询性能方面贡献非常突出。据微软统计,在面向OLAP查询统计类系统中,相比其他SQL传统版本的数据库,报表查询的性能最大可提升上十倍。
下面我们从存储的角度来了解下SQL Server 2014的可更新列存储索引。
什么是列存储
微软为了提升SQL Server的查询性能,更好的支持大数据分析,早在SQL Server 2012中就引入了列存储的技术,
列存储的本质是将一个张表按照不同的列拆分,然后每一列单独存储,这样一来,存储的单位由原来的每一行变成了每一列。
像下面这张表,表中10个列分布在10个页面中,在page1中包括了表中ROW1到ROWn中列C1的数据,在page2中包括ROW1到ROWn中列C2的数据,后面依次类推。
不过如果一次Bulk Insert插入的数据大于一个行组但小于两个行组时,多出的这部分数据必须也存储在delta Store中。
DELETE和UPDATE
因为列聚集索引的表可能同时包含行存储的delta store和列存储,所以在处理删除和更新时,两个不同区域会有所不同。
(1)delete
- 如果删除的行在Delta Store中,这跟传统行存储的删除方式没有区别,SQL Server会从逻辑上和物理上都删除该数据。
(2)update
理解了insert和delete后,我们再来看update就非常简单了。
- 如果update发生在列存储中
SQL Server会将该行在delete bitmap中bit标记为删除状态,同时插入一新行到delta store中。
- 如果update发生在delta store中
SQL Server直接更新delta store中这行的数据。
结论
尽管SQL Server 2014的列存储已经支持数据更新,但并不意味着生产环境下的报表能够从中获益。
列存储天生是为OLAP设计,其数据特征更趋向于静态,即使是数据的导入,微软也建议使用bulk insert,
所以如果数据库的日常操作中存在大量的增、删、改等操作,使用列存储的技术可能会适得其反。
解读SQL Server 2014可更新列存储索引——存储机制,布布扣,bubuko.com