SQL Server 2008中引入了稀疏列概念,它降低了对空值的存储要求。当一个列中有大量的空值时,将它定义为稀疏列,这样可以节省大量的硬盘空间。事实上,一个空值在稀疏列中根本不占用任何空间。 在使用稀疏列时也要有取舍,因为非空值所占的空间相对就大了。
定义为稀疏的列中,非空值要求多出4个字节的存储空间。例如,非稀疏列的DATETIME值需要8字节的存储空间,而稀疏列需要12字节。所以,微软建议在空间节省20-40%的时候再使用稀疏列。 当你决定使用稀疏列之后,需要记住有几条规则。
比如,该列必须可以设为空而且不能配置ROWGUIDCOL 和IDENTITY属性,不可以包含默认属性并且不……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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
如果执行查询,你将发现有许多数据集还都存在大量的空值。记住,区别就在于存储,而不是数据本身。
翻译
相关推荐
-
SQL Server 2008将退出微软主流数据库支持
你的企业是否还在运行SQL Server 2008?请注意微软为SQL Server 2008提供的主流技术支持服务将于今年的7月8日正式结束。
-
SQL Server 2008中的对称密钥加密
证书和非对称密钥使用数据库级的内部公钥加密数据,并且使用数据库级内部私钥解密数据。而对称密钥相对简单,它们包含一个同时用来加密和解密的密钥。
-
通过PassPhrase对SQL Server 2008加密
与数字证书类似,SQL Server 证书包括公钥和私钥这一对密钥,它们都用来加密和解密数据。SQL Server也拥有创建非对称密钥和对称密钥对象的能力。
-
SQL Server 2008存储过程加密与安全上下文
使用存储过程而不是直接访问基表,可以提供更好的安全性,你可以在行级或列级控制数据如何被修改。