使用列集 SQL Server 2008还有一个特性与稀疏列相关的,就是列集。列集同计算列相似,不同的地方就是你可以更新数据。 一个表只可以包含一个列集,并且要严格遵循像许多限制。比如,你无法将已定义为稀疏列的列集添加到表中。
然而,在已经定义为列集的表中你却可以添加稀疏列。在使用稀疏列时,你可以遵循SQL Server 2008在线指南列出的原则。 要创建一个列集,你可以在CREATE TABLE语句中添加如下的XML列定义t-sql脚本: IF EXISTS (SELECT table_name FROM information_s……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
使用列集
SQL Server 2008还有一个特性与稀疏列相关的,就是列集。列集同计算列相似,不同的地方就是你可以更新数据。
一个表只可以包含一个列集,并且要严格遵循像许多限制。比如,你无法将已定义为稀疏列的列集添加到表中。然而,在已经定义为列集的表中你却可以添加稀疏列。在使用稀疏列时,你可以遵循SQL Server 2008在线指南列出的原则。
要创建一个列集,你可以在CREATE TABLE语句中添加如下的XML列定义t-sql脚本:
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, ProductInfo XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ) GO INSERT INTO Products (ProductID, ProductName, ProductColor, ProductWeight, SellEndDate) SELECT ProductID, Name, Color, Weight, SellEndDate FROM Production.Product GO |
表定义显示,现在的结果同之前的例子差不多,只是现在表中包含了一个ProductInfo列。注意列是用XML文件类型进行定义的,它包含COLUMN_SET FOR ALL_SPARSE_COLUMNS关键字。
以上就是在表中创建列集需要做的事。当你从表中检索数据时,查询引擎将自动返回一个结构化数据集,它将包含稀疏列中的所有非空值。比如,如果你运行以上的SELECT语句,你将得到以下结果(只显示前10行):
1 Adjustable Race NULL
2 Bearing Ball NULL
3 BB Ball Bearing NULL
4 Headset Ball Bearings NULL
316 Blade NULL
317 LL Crankarm <ProductColor>Black</ProductColor>
318 ML Crankarm <ProductColor>Black</ProductColor>
319 HL Crankarm <ProductColor>Black</ProductColor>
320 Chainring Bolts <ProductColor>Silver</ProductColor>
321 Chainring Nut <ProductColor>Silver</ProductColor>
正如你所见,ProductInfo列包含了产品数据,以XML文档显示。如果稀疏列的值全为空,那么将只返回一个空值。
注意,结果集中不包含独立的稀疏列。当你在配置了列集的表中使用SELECT *检索数据时,将只返回列集和非稀疏列。然而,如果你在SELECT语句中指定稀疏列名称,列将会返回。比如,以下SELECT语句:
SELECT ProductID, ProductName, ProductColor FROM Products WHERE SellEndDate IS NOT NULL |
下表显示了前十行的返回数据:
709 Mountain Bike Socks, M White
710 Mountain Bike Socks, L White
725 LL Road Frame - Red, 44 Red
726 Road Frame - Red, 48 Red
727 Road Frame - Red, 52 Red
728 Road Frame - Red, 58 Red
729 Road Frame - Red, 60 Red
730 Road Frame - Red, 62 Red
731 Road Frame - Red, 44 Red
732 Road Frame - Red, 48 Red
就像上面提到的,当你检索一个列集时,所有的非空稀疏列数据都将返回。比如,ProductColor, ProductWeight 和 SellEndDate列都包含值,列集返回的结果如下:
Red
2.26
2002-06-30T00:00:00
注意结果中包含每个稀疏列的同一元素。
使用过滤索引
SQL Server 2008中的另一个和稀疏列相关的新特性就是过滤索引。过滤索引是一个非群集索引,它是在数据子集基础上定义的。例如,你希望在Product表中索引ProductName列时提高查询的性能。你可以创建一个过滤索引,不包含空值,像下面的例子一样。
CREATE NONCLUSTERED INDEX ixProductName ON Products (ProductName) WHERE SellEndDate IS NOT NULL |
非群集索引和过滤索引最基本的区别就是你需要在过滤索引定义中指定一个WHERE语句。这样的话,索引只会建立在非空值基础上。所有其他值都包含在索引内。
在使用稀疏列时,过滤索引可以帮你提升性能,减小存储压力。同列集一起使用,稀疏列和过滤索引有利于的你的部署,不过在使用之前要格外注意,使用过多的稀疏列和过滤索引,要求你的数据库要有良好的设计架构。在设计良好的情况下,稀疏列、列集和过滤索引绝对是使用SQL Server的好工具。
翻译
相关推荐
-
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存储过程加密与安全上下文
使用存储过程而不是直接访问基表,可以提供更好的安全性,你可以在行级或列级控制数据如何被修改。