SQL Server数据表压缩:行压缩与页压缩操作指南
SQL Server的数据压缩功能旨在减小数据在磁盘上的占用量,从而提升磁盘I/O效率。主要包含行压缩(Row Compression)和页压缩(Page Compression)两种模式。行压缩通过将固定长度数据类型转换为可变长度来节省空间,适合写入频繁的表;页压缩则在行压缩基础上进一步对重复值进行去重,适合以读取为主的大表。本文将详细介绍这两种压缩方式的原理、适用场景以及通过SSMS界面和T-SQL语句的具体操作方法。
概述
SQL Server的性能在很大程度上取决于磁盘I/O的效率。自SQL Server 2008起引入的数据压缩功能,能够有效减少数据的物理存储空间。压缩可应用于堆表、聚集索引表、非聚集索引表、索引视图及分区表。
支持压缩的数据类型
常见的数值、日期及二进制数据类型均支持压缩,包括:smallint、int、bigint、decimal、numeric、real、float、money、smallmoney、bit、datetime、datetime2、datetimeoffset、char、nchar、binary以及rowversion等。
行压缩 (Row Compression)
行压缩改变了数据的物理存储结构,但不需要修改应用程序代码。其核心机制是将固定长度的数据存储格式转换为可变长度存储,从而仅保留实际数据所需的字节数。例如,原本占用4字节的int类型,若实际值为5,则仅需1个字节存储。
第1步:通过SSMS进行行压缩
适用于熟悉图形界面的用户。
- 压缩表(含聚集索引):在对象资源管理器中定位目标表 → 右键点击 → 选择“存储” → “管理压缩” → 勾选“对所有分区使用相同压缩类型” → 在右侧下拉菜单中选择 Row → 点击“立即执行” → 完成。
ALTER TABLE [dbo].[AnnexFileList] REBUILD PARTITION = ALL
WITH ( DATA_COMPRESSION = ROW );
- 压缩非聚集索引:在对象资源管理器中定位目标索引 → 右键点击 → 选择“存储” → “管理压缩” → 勾选“对所有分区使用相同压缩类型” → 在右侧下拉菜单中选择 Row → 点击“立即执行” → 完成。
ALTER INDEX [PK_ANNEXFILELIST]
ON [dbo].[AnnexFileList] REBUILD PARTITION = ALL
WITH ( DATA_COMPRESSION = ROW );
第2步:通过T-SQL进行行压缩
对于需要脚本化管理的场景,可以使用以下命令:
- 重构现有表的聚集索引:
-- 在现有表上进行行压缩 alter table ceshi rebuild with(data_compression=row); - 重构现有表的非聚集索引:
-- 对特定非聚集索引进行行压缩 alter index new_name on ceshi rebuild with(data_compression=row); - 创建新表时直接启用压缩:
create table yasuo ( id int primary key, name varchar(50), mail varchar(50) ) with (data_compression=row);
若在创建表时指定了行压缩,数据在插入过程中会自动按照行压缩格式存储。
页压缩 (Page Compression)
页压缩在行压缩的基础上增加了两项增强功能:前缀压缩(Prefix Compression)和字典压缩(Dictionary Compression)。
- 前缀压缩:扫描每一列,找出重复的前缀值,将这些值存储在页头部的压缩信息区,并将列中的实例替换为指向该信息的引用。
- 字典压缩:在整个页面范围内搜索重复值(不限于单列),找到后将重复值移至页头,并用指针替代原值。
页压缩能提供更高的压缩率,尤其适用于重复数据较多的列。但需要注意,由于需要更多的CPU计算来进行压缩和解压,页压缩可能会略微增加处理器的负载。
实施注意事项
- 内存数据状态:数据库引擎在内存中缓存的是解压后的数据。如果启用了压缩,加载到内存的数据会先解压缩供SQL Server处理,这会增加CPU开销。
- 新增数据:在执行INSERT操作时,新行的数据也会自动应用行或页压缩算法进行存储。
- 更新与删除:
- 行压缩对象在更新后通常保持当前的压缩级别。
- 页压缩在更新或删除操作后,可能需要重新评估并重新计算压缩,具体取决于受影响的数据量和分布情况。
选择策略:使用哪种压缩?
根据业务场景选择合适的压缩类型可以平衡空间节省与系统开销:
- 行压缩 (Row):适用于需要频繁进行更新、插入操作的表。它提供了较好的空间节省同时保持了较低的CPU开销。
- 页压缩 (Page):适用于主要执行读取操作(如报表查询、数据分析)且数据重复率较高的表。它能提供更高的压缩比,适合读多写少的场景。
以上就是关于SQL Server数据表压缩的详细内容,更多关于SQL Server性能优化与T-SQL操作的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









