标签:
对于行存储的表和索引,使用数据压缩功能可帮助减小数据库的大小。 除了节省空间之外,数据压缩还可以帮助提高 I/O 密集型工作负荷的性能,因为数据存储在更少的页中,查询需要从磁盘读取的页更少。 但是,在与应用程序交换数据时,在数据库服务器上需要额外的 CPU 资源来压缩和解压缩数据。
1,在表的storage 选项卡查看表的存储属性
2,sp_estimate_data_compression_savings 估算压缩的效果
使用 sp_estimate_data_compression_savings 估算对表或分区启用行压缩或页压缩时可能带来的节省量。
EXEC SYS.sp_estimate_data_compression_savings @SCHEMA_NAME=‘dbo‘, @OBJECT_NAME=‘table_name‘, @INDEX_ID=NULL, @PARTITION_NUMBER=NULL, @DATA_COMPRESSION=‘ROW‘
3, 压缩存在额外的开销
当最大行大小加上压缩开销超过最大行大小 8060 个字节时,不能对表启用压缩功能。例如,不能压缩具有 c1 char(8000) 和 c2 char(53) 列的表,因为存在额外的压缩开销
4,Row 压缩的实现
启用行压缩只会更改与数据类型相关联的数据的物理存储格式,而不会更改其语法或语义。当对一个或多个表启用压缩时,不需要更改应用程序。 新的记录存储格式主要有以下更改:
注意:将对所有数据类型的 NULL 和 0 值进行优化,从而使它们不占用任何字节。
实现的原理,通俗解释是通过修改物理存储格式,达到压缩数据的目的,但是物理存储格式的修改不会影响该字段使用的语法,例如:
5,Page 压缩的实现
页压缩包含行压缩,以及前缀压缩和字典压缩,当使用页压缩时,将仅使用行压缩来压缩索引的非叶级别页.
6,通过ssms对表开启压缩功能
通过表的存储来Manage Compression,select compression type
7,写脚本对表开启压缩功能
可以预先评估一下压缩的数据量的大小,然后再进行压缩
EXEC sp_estimate_data_compression_savings
@schema_name = ‘dbo‘,
@object_name = ‘hierarchy‘,
@index_id = null,
@partition_number = NULL,
@data_compression = ‘row‘ ;
ALTER TABLE [dbo].[hierarchy] REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW )
8,对索引开启page压缩功能
SELECT name, index_id FROM sys.indexes WHERE OBJECT_NAME (object_id) = N‘TransactionHistory‘; EXEC sp_estimate_data_compression_savings @schema_name = ‘Production‘, @object_name = ‘TransactionHistory‘, @index_id = 2, @partition_number = NULL, @data_compression = ‘PAGE‘ ; ALTER INDEX IX_TransactionHistory_ProductID ON Production.TransactionHistory
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE); GO
标签:
原文地址:http://www.cnblogs.com/ljhdo/p/4577994.html