摘要:SQL Server 2008中有个有趣的新特性:数据压缩,利用该特性,我们可以减小数据表,索引以及分区的子集的大小。本文通过例子详细介绍如何使用该特性。
SQL Server中的数据压缩功能,最早在SQL Server 2005 SP2中出现,当时针对decimail和numeric数据类型推出了新的存储格式--vardecimal。vardecimal存储格式允许decimal和numeric数据类型的存储作为一个可变长度列。 这个概念已扩展在SQL Server 2008的所有固定长度的数据类型,如integer, char, 和 float等数据类型。借助数据压缩,减少了存储成本,并提高查询性能,减少I / O和增加缓冲点击率。 虽然SQL Server 2008 支持 vardecimal 存储格式;但是,由于行级压缩可实现同样的目标,因此在SQL Server 2008中不推荐使用 vardecimal 存储格式。 SQL Server 2008对于表和索引,同时支持行(ROW)和页面(Page)两种压缩模式。
下面对这两种数据压缩类型简单做个对比:
行压缩。
行压缩可以将固定长度类型存储为可变长度存储类型。例如char(100)列储存在一个可变长度存储格式将只使用了存储量所定义的数据。储存的“ SQL Server 2008 ”,压缩后只需要存放15个字符,而非全部100个字符,从而节省了85%的存储空间。这是在SQL Server 2005 Service Pack 2中提供的vardecimal存储格式的思路的延伸。同时需要注意的是,这种压缩模式,将对所有数据类型的 NULL 和 0 值进行优化,从而使它们不占用任何字节。
页面压缩模式。
这种压缩功能,建立在行压缩基础之上,通过只存储一次页面上相同事件字节来将存储的冗余数据减到最小。使用页压缩压缩表和索引,除了采用行压缩,还采用了前缀压缩和字典压缩。 数据压缩会减少的大小您的表格或索引指标,最好是先评估一下压缩后所能节省的空间。,估计节省空间在一个表或索引使用,无论是sp_estimate_data_compression_savings系统存储过程还是数据压缩向导。检查过程中,如果发现现有数据的零碎程度很高,则可能需要重新生成索引(而不是使用压缩)来减小索引的大小。
1、估算压缩后可节省的存储空间 我们可以利用sp_estimate_data_compression_savings系统存储过程或者数据压缩向导可以预估出数据表或者索引可以节省的存储空间。 以下举例说明:在AdventureWorks 数据库中使用sp_estimate_data_compression_savings系统存储过程:
参数说明: 第一个参数是包含表或索引视图的数据库架构的名称。如果 为 NULL,则使用当前用户的默认架构。 第二个参数是索引所属的表或索引视图的名称。 第三个参数是索引的ID 第四个参数是对象中的分区号 最后一个参数是要评估的压缩的类型。 执行上面的SQL语句,我们将看到以下的执行结果:
图1 执行 SQL语句 后的输出结果注意size_with_current_compression_setting(KB)和 size_with_requested_compression_setting (KB)这两个列,这两字段将告诉您 Sales.SalesOrderDetail这个表预计可节省的空间。 如果要使用数据压缩向导,右键点击Sales.SalesOrderDetail这个表,在弹出菜单中选择Storag项中的Manage Compression子项。
图2 数据压缩菜单这将启动数据压缩向导。在欢迎界面中,单击“Next”,进入下一步骤。
图3 数据压缩向导欢迎界面在选择压缩类型页面中,点击“Compression Type”这一列的下拉菜单,根据实际需要选择压缩类型。
SQL Server中的数据压缩功能,最早在SQL Server 2005 SP2中出现,当时针对decimail和numeric数据类型推出了新的存储格式--vardecimal。vardecimal存储格式允许decimal和numeric数据类型的存储作为一个可变长度列。 这个概念已扩展在SQL Server 2008的所有固定长度的数据类型,如integer, char, 和 float等数据类型。借助数据压缩,减少了存储成本,并提高查询性能,减少I / O和增加缓冲点击率。 虽然SQL Server 2008 支持 vardecimal 存储格式;但是,由于行级压缩可实现同样的目标,因此在SQL Server 2008中不推荐使用 vardecimal 存储格式。 SQL Server 2008对于表和索引,同时支持行(ROW)和页面(Page)两种压缩模式。
下面对这两种数据压缩类型简单做个对比:
行压缩。
行压缩可以将固定长度类型存储为可变长度存储类型。例如char(100)列储存在一个可变长度存储格式将只使用了存储量所定义的数据。储存的“ SQL Server 2008 ”,压缩后只需要存放15个字符,而非全部100个字符,从而节省了85%的存储空间。这是在SQL Server 2005 Service Pack 2中提供的vardecimal存储格式的思路的延伸。同时需要注意的是,这种压缩模式,将对所有数据类型的 NULL 和 0 值进行优化,从而使它们不占用任何字节。
页面压缩模式。
这种压缩功能,建立在行压缩基础之上,通过只存储一次页面上相同事件字节来将存储的冗余数据减到最小。使用页压缩压缩表和索引,除了采用行压缩,还采用了前缀压缩和字典压缩。 数据压缩会减少的大小您的表格或索引指标,最好是先评估一下压缩后所能节省的空间。,估计节省空间在一个表或索引使用,无论是sp_estimate_data_compression_savings系统存储过程还是数据压缩向导。检查过程中,如果发现现有数据的零碎程度很高,则可能需要重新生成索引(而不是使用压缩)来减小索引的大小。
1、估算压缩后可节省的存储空间 我们可以利用sp_estimate_data_compression_savings系统存储过程或者数据压缩向导可以预估出数据表或者索引可以节省的存储空间。 以下举例说明:在AdventureWorks 数据库中使用sp_estimate_data_compression_savings系统存储过程:
![](http://tech.ccidnet.com/col/attachment/2008/9/1627789.jpg)
参数说明: 第一个参数是包含表或索引视图的数据库架构的名称。如果 为 NULL,则使用当前用户的默认架构。 第二个参数是索引所属的表或索引视图的名称。 第三个参数是索引的ID 第四个参数是对象中的分区号 最后一个参数是要评估的压缩的类型。 执行上面的SQL语句,我们将看到以下的执行结果:
![](http://tech.ccidnet.com/col/attachment/2008/9/1627791.jpg)
图1 执行 SQL语句 后的输出结果注意size_with_current_compression_setting(KB)和 size_with_requested_compression_setting (KB)这两个列,这两字段将告诉您 Sales.SalesOrderDetail这个表预计可节省的空间。 如果要使用数据压缩向导,右键点击Sales.SalesOrderDetail这个表,在弹出菜单中选择Storag项中的Manage Compression子项。
![](http://tech.ccidnet.com/col/attachment/2008/9/1627793.jpg)
图2 数据压缩菜单这将启动数据压缩向导。在欢迎界面中,单击“Next”,进入下一步骤。
![](http://tech.ccidnet.com/col/attachment/2008/9/1627795.jpg)
图3 数据压缩向导欢迎界面在选择压缩类型页面中,点击“Compression Type”这一列的下拉菜单,根据实际需要选择压缩类型。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-512205/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16436858/viewspace-512205/