使用SQL Server实现稀疏列存储策略









在时间序列数据库中,由于数据记录的实时散布及数值的变动,存储大量的列会占用大量的空间 ; 由于实时更新,且常常比较旧的与新的数据进行对照,运算速度会变慢,因此提出了稀疏列存储策略。



它是一种用来避免空间浪费和提高查询效力的技术,主要思想是将多行常规数据supercolumns 进行展开和合并存储,以每行的实际数据为列并存储每行的标识位,结构上充分发挥存储器的空间紧缩优势,极大地减少存储空间使用量,从而缩减查询时间。



SQL Server使用sp_addextendedproperty的命令来实现在表中稀疏列的存储,例如有以以下名:



valueA,valueB,valueC ,valueD



创建valueA列



CREATE TABLE [TestTable] (


[id] varchar(32)null,


[valueA] int Not NULL


);



将valueA 标记为稀疏列



exec sp_addextendedproperty @name = N’MS_Description’,


@value =N’Sparse Column’,


@level0type =N’SCHEMA’, @level0name =N’dbo’,


@level1type=N’TABLE’, @level1name=N’TestTable’,


@level2type=N’COLUMN’, @level2name=N’valueA’



然后分别为valueB,valueC ,valueD标记为稀疏列。



exec sp_addextendedproperty @name = N’MS_Description’,


@value =N’Sparse Column’,


@level0type =N’SCHEMA’, @level0name =N’dbo’,


@level1type=N’TABLE’, @level1name=N’TestTable’,


@level2type=N’COLUMN’, @level2name=N’valueB’



exec sp_addextendedproperty @name = N’MS_Description’,


@value =N’Sparse Column’,


@level0type =N’SCHEMA’, @level0name =N’dbo’,


@level1type=N’TABLE’, @level1name=N’TestTable’,


@level2type=N’COLUMN’, @level2name=N’valueC’



exec sp_addextendedproperty @name = N’MS_Description’,


@value =N’Sparse Column’,


@level0type =N’SCHEMA’, @level0name =N’dbo’,


@level1type=N’TABLE’, @level1name=N’TestTable’,


@level2type=N’COLUMN’, @level2name=N’valueD’



在查询SQL Server中的稀疏列时,需要使用“columnproperty”函数,用法以下:



SELECT *


FROM sys.columns


WHERE


[name] = ‘valueA’


and COLUMNPROPERTY([id], [name], ‘IsSparse’) = 1



使用以上代码可以查询到valueA会不会是稀疏列,如果查询结果为1,则说明该列已被设定为稀疏列。



因此,使用SQL Server实现稀疏列的存储需要依照以上步骤进行:



1.首先创建需要设定为稀疏列的列;


2.使用sp_addextendedproperty命令将需要设定为稀疏列的列标记为稀疏列;


3.使用columnproperty函数查询指定列会不会为稀疏列。



使用SQL Server实现稀疏列存储策略可以说明,这是一种有效的解决方案,可以有效地服务于时间序列数据库,以节省空间和提高查询性能。