SQL Server–2008/2012 企业版,提供了数据压缩的功能,普遍情况下,采用页的压缩方式能获得5
倍的压缩效果,压缩技术虽然增加了一定CPU 运算的工作量,但它极大的减少了磁盘的空间站用,节省
了大量的磁盘IO,总体性能得以加速,如果企业的数据量每年以20G 或以上的数据量递增的性况下,采
用数据表/索引压缩特性,是解决IO 性能问题的首选。
以下以Test 表为例创建表及索引的压缩;

-- 压缩表
ALTER TABLE [dbo].[Test] REBUILD PARTITION = ALL
WITH
(DATA_COMPRESSION = PAGE
)

--压缩表索引
ALTER INDEX [IX_Test Name] ON [dbo].[Test ] REBUILD PARTITION = ALL WITH ( PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON,
ONLINE = OFF, SORT_IN_TEMPDB = OFF, DATA_COMPRESSION = PAGE )

注意:数据量大的表压缩耗时很长,需要在系统停用的情况下进行压缩。

	declare @TableName nvarchar(50)
	declare @IxTemp table
	(
		index_name nvarchar(100),
		index_description nvarchar(100),
		index_keys nvarchar(100)
	)
	declare @Sql nvarchar(max)
	declare @SelectSql nvarchar(max)
	declare @IxSQL nvarchar(max)

	--定义标明
	Set @TableName='Lot'

	-------------------------压缩表-------------------------
	--设置压缩表SQL,执行
	Set @Sql='ALTER TABLE [dbo].['+@TableName+'] REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE )'
	exec (@Sql)
	
	-------------------------压缩表-------------------------

	-------------------------获取表索引-------------------------
	--获取表索引并写入临时变量表
	Set @SelectSql=''
	insert into @IxTemp
	(
	    index_name ,
	    index_description ,
	    index_keys
	)
	EXEC Sp_helpindex @TableName
	-------------------------获取表索引-------------------------
	
	-------------------------压缩表索引-------------------------
	--开始处理索引数据
	declare	@index_name nvarchar(100),
					@index_description nvarchar(100),
					@index_keys nvarchar(100)

	declare Ix_Cur cursor for 
	Select * from @IxTemp
	open Ix_Cur
	fetch next from Ix_Cur  into @index_name,@index_description,@index_keys
	while @@fetch_status=0     
	begin
		Set @IxSQL=''
		--压索引
		Set @IxSQL='ALTER INDEX ['+@index_name+'] ON [dbo].['+@TableName+'] REBUILD PARTITION = ALL WITH ( PAD_INDEX = OFF,
		STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON,
		ONLINE = OFF, SORT_IN_TEMPDB = OFF, DATA_COMPRESSION = PAGE )'

		Select @IxSQL

		fetch next from Ix_Cur  into @index_name,@index_description,@index_keys
	end 
	close Ix_Cur
	deallocate Ix_Cur 
	-------------------------压缩表索引-------------------------

作者 uoscn