您好,欢迎访问一九零五行业门户网

SQL Server 2008中使用稀疏列和列集的方法(一)_MySQL

sqlserver2008
尽管存储的成本已经很低了,但是我们仍然需要考虑使用多种技术(例如压缩和存档)来节省空间。当你思考怎样节省空间时,你第一个想到的是文件系统,但是空间节省也可以用在数据库。当我们创建一个数据库时,我们确保数据文件具有合适的大小和增长速度。
我们定期分析我们的数据库规模并执行缩小操作。我们可能执行这些任务用于不同的目的,但是有一个方面是相同的,这些任务帮助我们确保我们的数据库具有最佳的存储。microsoft sql server为我们提供了用于降低数据库所用空间的各种技术。sql server 2008推出了一个用于定位可为空字段的技术,它为可为空字段提供了最佳的存储。在sql server 2008中的这个新特性就是稀疏列。这篇文章不会讲述很多关于稀疏列的特性,它介绍了具有列集的稀疏列的使用,以及在使用它们时你需要了解和考虑的事情。
这篇文章描述:
◆什么是稀疏列?
◆什么是列集?
◆在一个列集中插入和更新数据。
◆使用触发器跟踪变更。
◆对列集实施安全。
什么是稀疏列?
稀疏列是一个普通字段,就像其它字段一样,但是它降低了对空值的存储要求。一个可为空字段可以在表创建或修改时添加sparse关键字来成为稀疏列。如果一个列是稀疏列,那么sql server不会为空值分配空间。注意,在使用这个特性时它会增加对非空值数据提取的花费。因此你需要计算可以节省的空间来仔细地对字段应用这个特性。推荐只在空间至少可以节省20%至40%时使字段成为稀疏列。blo提供了一个包含字段中每个数据类型所需空值百分比的表,以便使这些字段成为稀疏列。
什么是列集?
列集是一个显示所有稀疏列的字段,它作为一个xml类型的字段添加到表中。它不是物理上存在于这个表中的,它只像是一个计算出来的字段,但是它允许你对它进行修改。推荐你只在有很多稀疏列时使用列集,因为如果使用了列集而不是使用各个稀疏列,那么它会加快修改和提取。
下面的代码显示了为一个表创建一个列集的方法。
代码1:创建一个具有稀疏列和一个列集的表。
create table [dbo].[customers]
(
[id] int primary key,
[firstname] varchar(50) not null,
[lastname] varchar(50) not null,
[gender] bit sparse null, -- 1 = male, 2 = female
[telephone] varchar(15) sparse null,
[monthlyincome] money sparse null,
[comments] varchar(1000) sparse null
[allsparsecolumns] xml column_set for all_sparse_columns
)
我为所有可为空字段添加了sparse关键字,但是如同我前面提到的,应该在使它们成为稀疏列之前分析空值所占百分比。注意,当你创建这个表时你需要添加这个字段。sql server 不允许你没有稀疏列的情况下拥有列集字段。之后添加为稀疏列的字段可以使用添加的列集,看下面的代码:
代码2:创建具有一个列集的表,不使任何字段成为稀疏列。
-- adding column set without sparse columns 
create table [dbo].[customers_1] 

[id] int primary key, 
[firstname] varchar(50) not null, 
[lastname] varchar(50) not null, 
[gender] bit null, -- 1 = male, 2 = female 
[telephone] varchar(15) null, 
[monthlyincome] money null, 
[comments] varchar(1000) null, 
[allsparsecolumns] xml column_set for all_sparse_columns 

-- inserting a record 
insert into dbo.customers_1 
([id], [firstname], [lastname], [gender], [telephone], [monthlyincome], [comments]) 
values 
(1, 'dinesh', 'priyankara', 1, '777395871', 20000, 'no comments') 
-- this returns null 
select allsparsecolumns from dbo.customers_1 
-- make the gender column as a sparse column 
alter table [dbo].[customers_1] 
alter column [gender] bit sparse null 
go 
-- make the telephone column as a sparse column 
alter table [dbo].[customers_1] 
alter column [telephone] varchar(15) sparse null 
-- now it returns values of sparse columns as a xml 
select allsparsecolumns from dbo.customers_1
其它类似信息

推荐信息