SQL Server 2008稀疏列使用心得(上)

日期: 2009-08-16 作者:Robert Sheldon翻译:孙瑞 来源:TechTarget中国

SQL Server 2008中引入了稀疏列概念,它降低了对空值的存储要求。当一个列中有大量的空值时,将它定义为稀疏列,这样可以节省大量的硬盘空间。事实上,一个空值在稀疏列中根本不占用任何空间。   在使用稀疏列时也要有取舍,因为非空值所占的空间相对就大了。

定义为稀疏的列中,非空值要求多出4个字节的存储空间。例如,非稀疏列的DATETIME值需要8字节的存储空间,而稀疏列需要12字节。所以,微软建议在空间节省20-40%的时候再使用稀疏列。   当你决定使用稀疏列之后,需要记住有几条规则。

比如,该列必须可以设为空而且不能配置ROWGUIDCOL 和IDENTITY属性,不可以包含默认属性并且不……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

SQL Server 2008中引入了稀疏列概念,它降低了对空值的存储要求。当一个列中有大量的空值时,将它定义为稀疏列,这样可以节省大量的硬盘空间。事实上,一个空值在稀疏列中根本不占用任何空间。

  在使用稀疏列时也要有取舍,因为非空值所占的空间相对就大了。定义为稀疏的列中,非空值要求多出4个字节的存储空间。例如,非稀疏列的DATETIME值需要8字节的存储空间,而稀疏列需要12字节。所以,微软建议在空间节省20-40%的时候再使用稀疏列。

  当你决定使用稀疏列之后,需要记住有几条规则。比如,该列必须可以设为空而且不能配置ROWGUIDCOL 和IDENTITY属性,不可以包含默认属性并且不可以帮对规则。另外,如果该列配置了某些数据类型,比如TEXT, IMAGE,或TIMESTAMP,那么它就不能定义为稀疏列。

  使用稀疏列

  配置稀疏列其实很简单,你只需要在列定义中引入SPARSE关键字。比如:在以下的T-SQL脚本中,我在AdventureWorks 2008样本数据库中创建了Products表,然后用Production.Product表中的数据来填充表:

  USE AdventureWorks2008
  GO
  IF EXISTS (SELECT table_name
  FROM information_schema.tables
  WHERE table_name = 'Products')
  DROP TABLE Products
  GO
  CREATE TABLE Products
  (
  ProductID INT NOT NULL PRIMARY KEY,
  ProductName NVARCHAR(50) NOT NULL,
  ProductColor NVARCHAR(15) SPARSE NULL,
  ProductWeight DECIMAL(8,2) SPARSE NULL,
  SellEndDate DATETIME SPARSE NULL
  )
  GO
  INSERT INTO Products
  (ProductID, ProductName, ProductColor, ProductWeight, SellEndDate)
  SELECT ProductID, Name, Color, Weight, SellEndDate
  FROM Production.Product
  GO

  在表定义中你可以看见,我将ProductColor, ProductWeight 和 SellEndDate列定义为稀疏列。结果这些列的空值存储变得更高效了。(源数据包含很多空值)。

  你可以对稀疏列进行查询,就相对其他列一样,使用SELECT *:

  SELECT * FROM Products

  如果执行查询,你将发现有许多数据集还都存在大量的空值。记住,区别就在于存储,而不是数据本身。

翻译

孙瑞
孙瑞

相关推荐