3.1 数据压缩

3.1  数据压缩


3.1.1 数据压缩

  SQL Server 的性能有很大一部分依赖于磁盘 I/O 的效率,提高 I/O 效率某种程度上就意味着提高性能。SQL Server 2008 引入了了数据压缩功能来提高磁盘 I/O 效率。

  数据压缩意味着减小数据的有磁盘占用量,所以数据压缩可以用在表,聚集索引,非聚集索引,视图索引或是分区表,分区索引上。

  启用压缩只会更改与数据类型相关联的数据的物理存储格式,而不会更改其语法或语义。当对一个或多个表启用压缩时,不需要更改应用程序。

  若要确定更改压缩状态将对表或索引有何影响,请使用 sp_estimate_data_compression_savings 存储过程。

  仅企业版、开发版等高级版本中才能使用数据压缩功能。



3.1.2 数据压缩的级别

  数据压缩可以在两个级别上实现:行级别和页级别。

(1)行压缩

  启用行压缩后,新的记录存储格式对数据类型(例如,integer、decimal 和 float)、基于数值的类型(例如,datetime 和 money)等使用了可变长度存储格式。并对所有数据类型的 NULL 和 0 值进行优化,从而使它们不占用任何字节。 



(2)页压缩

  对表和索引进行页压缩的过程由三个操作完成。

  首先,对数据行进行行压缩。

  然后,在页头生成一系列的前缀,列值更改为指向前缀的引用。

  最后,应用字典压缩。此操作将搜索并替换页面上的任意位置的重复值。与前缀压缩不同,字典压缩不局限于一列。

  如果对索引使用页压缩,非叶级页将仅使用行压缩。


3.1.3  启用压缩

  表和索引在创建的同时就可以压缩,也可以使用Alter Table Rebuild With 或是 Alter Index Rebuild With 语法压缩已存在表或索引。以下是语法示例:

CREATE TABLE T1

(c1 int, c2 nvarchar(50) )

WITH ( DATA_COMPRESSION = ROW )

GO

ALTER TABLE [dbo].[ProductCategory] REBUILD PARTITION = ALL

WITH ( DATA_COMPRESSION = PAGE )

GO


  也通过 SSMS 图形界面生成 T-SQL 脚本或者直接启用压缩。右键单击某张需要启用压缩的表或它的索引,在右键菜单中依次选择“存储”、“管理压缩”。

wKioL1YI_GHSf06OAAKi_gGe3cE765.jpg


  在“欢迎使用数据压缩向导”页,单击“下一步”。

wKiom1YI_FiTrD-IAAFv29LRWK4660.jpg


  在“选择压缩类型”页,选择合适的压缩类型(None、Page、Row)。单击右下角的“计算”按键,对压缩结果进行估算。单击“下一步”。

wKioL1YI_GKAkA9GAAGbjn47qWY867.jpg


  在“选择输出选项”页,选择创建 T-SQL 脚本或者立即运行。

wKiom1YI_HGxixZfAAHp3hknmoE638.jpg


wKioL1YI_HqybDAOAAFeWnaWwh4683.jpg


wKiom1YI_hyBHLD9AAF383KEUlA845.jpg



3.1.4  数据压缩的注意事项

  非聚集索引不继承表的压缩属性。若要压缩索引,必须显式设置索引的压缩属性。默认情况下,在创建索引时,索引的压缩设置将设置为 NONE。

  若要更改堆的压缩设置,要求对表重新生成所有非聚集索引,以便它们具有指向堆中的新行位置的指针。

  通过压缩可在一页上存储更多的行,但不会更改表或索引的最大行大小。当最大行大小加上压缩开销超过最大行大小 8060 个字节时,不能对表启用压缩功能。



本文出自 “SQLServer2014丛书” 博客,谢绝转载!

你可能感兴趣的:(压缩)