使用SQL Server实现稀疏列存储策略(sqlserver稀疏列)
在时间序列数据库中,由于数据记录的实时分布及数值的变动,存储大量的列会占用大量的空间 ; 由于实时更新,且经常比较旧的与新的数据进行对比,运算速度会变慢,因此提出了稀疏列存储策略。
它是一种用来避免空间浪费和提高查询效率的技术,主要思想是将多行常规数据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实现稀疏列存储策略可以说明,这是一种有效的解决方案,可以有效地服务于时间序列数据库,以节省空间和提高查询性能。