SQL Server 2008中的稀疏列和列集

这是两个新增的特性。

关于稀疏列的详细介绍,请参考 http://msdn.microsoft.com/zh-cn/library/cc280604.aspx

关于列集的详细介绍,请参考 http://msdn.microsoft.com/zh-cn/library/cc280521.aspx 

我的总结如下

1. 稀疏列主要是为了提供对可空字段的更好一个存储机制,它可以节省空间(具体说它在真正空值的时候就不占空间),但也会带来一些性能方面的影响。所以要有所权衡。

稀疏列主要使用场景:一个实体有很多属性列,但很多属性都可能填不满。这在以前我们称为属性集问题。

稀疏列不是一个数据类型,它是一个列的属性而已。

2. 列集是可以定义所有稀疏列的集合。这是一个XML数据类型。如果为多个稀疏列定义了一个列集,那么针对这些列的修改,就既可以直接修改这些列,也可以通过一次性通过修改列集字段来完成。列集字段其实是一个计算字段。

下面来看一个例子

首先,看看如何使用稀疏列。这里的关键在于定义的时候使用SPARSE关键字

USE AdventureWorks
GO

CREATE TABLE DocumentStore
(DocID int PRIMARY KEY,
Title varchar(200) NOT NULL,

GO
--插入数据是一模一样的
INSERT DocumentStore(DocID, Title, ProductionSpecification, ProductionLocation)
VALUES (1, 'Tire Spec 1', 'AXZZ217', 27)
GO

INSERT DocumentStore(DocID, Title, MarketingSurveyGroup)
VALUES (2, 'Survey 2142', 'Men 25 - 35')
GO
 
然后,我们看看如何把列集与稀疏列进行结合使用
USE AdventureWorks;
GO

CREATE TABLE DocumentStoreWithColumnSet
(DocID int PRIMARY KEY,
Title varchar(200) NOT NULL,

GO
--使用列集之后,既可以直接使用列集插入数据,也可以使用稀疏列本身插入数据
INSERT DocumentStoreWithColumnSet (DocID, Title, ProductionSpecification, ProductionLocation)
VALUES (1, 'Tire Spec 1', 'AXZZ217', 27)
GO

INSERT DocumentStoreWithColumnSet (DocID, Title, MarketingSurveyGroup)
VALUES (2, 'Survey 2142', 'Men 25 - 35')
GO

 

INSERT DocumentStoreWithColumnSet (DocID, Title, SpecialPurposeColumns)
VALUES (3, 'Tire Spec 2', )
GO
有意思的是,此时如果再以SELECT *的语法查询该表的话,那些稀疏列默认是不会被返回的,而只是返回列集
 
当然啦,如果还是想返回稀疏列本身的内容,我们可以通过下面的语法
SELECT DocID, Title, ProductionSpecification, ProductionLocation 
FROM DocumentStoreWithColumnSet
WHERE ProductionSpecification IS NOT NULL ;

image

至于更新,和插入一样,两种方式都是可以的,且效果一样

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值