八、IO优化(3)稀疏列

2020-01-08 11:24:06 浏览数 (1)

一、Nullable

  在设计表时,有时会允许某列可以使用Null值(默认)。

CREATE TABLE [dbo].[EmpTable2]( [EmpID] [varchar](10) NOT NULL, [DepID] [nvarchar](10) NULL, [Title] [nvarchar](10) NULL )

二、稀疏列

  稀疏列是对 Null 值采用优化的存储方式的普通列。

  稀疏列减少了 Null 值的空间需求,但代价是检索非 Null 值的开销增加。 当至少能够节省 20% 到 40% 的空间时,才应考虑使用稀疏列。

三、稀疏列的使用场景

1. 列集

  使用稀疏列的表可以指定一个列集以返回表中的所有稀疏列。列集是一种非类型化的 XML 表示形式,它将表的所有稀疏列组合成为一种结构化的输出。列集与计算列的相似之处在于,列集并不是物理地存储在表中。列集与计算列的不同之处在于,列集可直接更新。

  稀疏列和列集是通过使用 CREATE TABLE 或 ALTER TABLE 语句定义的。INSERT、UPDATE 和 DELETE 语句可以通过名称来引用稀疏列。详见 http://technet.microsoft.com/zh-cn/library/cc280604(v=sql.105).aspx

2. 筛选索引

  对于仅包含少量非 NULL 值的稀疏列,因为稀疏列有许多 Null 值行,所以尤其适用于筛选索引。稀疏列的筛选索引可以仅仅对已填充值的行编制索引。这会创建一个更小、更有效的索引。

本文结语:

  使用稀疏列,可以减小存储空间,或者创建更有效的筛选索引。

0 人点赞