架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 45|回复: 0

[技巧] SQL Server 数据库表之行压缩、页压缩

[复制链接]
发表于 前天 11:20 | 显示全部楼层 |阅读模式
需求:在 SQL Server 数据库中,有一个表(例如:日志表、请求记录表)占用非常大的磁盘空间,可能是几百 GB,如何缩小表空间的占用呢?可以启用数据压缩(节省空间),适用于重复性高的文本(如 HTML、JSON、日志)。

行(ROW)压缩

压缩将改变数据的物理存储,但不改变数据的逻辑结构。行压缩的过程:

​识别每一列的数据类型,转为可变长度
最后将存储空间的请求量减少的到实际需求
压缩后,增加了每一页上的存储数据量
压缩后,减少元数据量
比如:某一列的数据类型是smallint,默认状态下系统分配2个字节
但实际中,只是用了1个字节的空间,如果在表上启用压缩,就可以进行按需分配

页(PAGE)压缩

页压缩执行额外的操作来增强行压缩
主要操作:行压缩、前缀压缩、字典压缩

CPU 消耗:页(PAGE)压缩 > 行(ROW)压缩

测试

新建 Users1、Users2 表,都插入 10 万条数据,sql 脚本如下:
查看表空间占用,都为 3.27 MB,命令如下:
如下图:

QQ截图20260109084700.jpg

查看 Users2 表压缩状态,命令如下:
如下图:

QQ截图20260109084640.jpg

sp_estimate_data_compression_savings 估算为行、页面、列存储、列存储存档或 XML 压缩启用表或分区时可能发生的节省。命令如下:
输出结果如下:
object_name        schema_name        index_id        partition_number        size_with_current_compression_setting(KB)        size_with_requested_compression_setting(KB)        sample_size_with_current_compression_setting(KB)        sample_size_with_requested_compression_setting(KB)
Users2        dbo        1        1        3368        1296        3448        1328

size_with_current_compression_setting(KB)             3368 KB        当前压缩设置下,该索引占用的空间 ≈ 3.29 MB
size_with_requested_compression_setting(KB)            1296 KB        如果启用你请求的新压缩方式(如 PAGE 或 ROW),预计占用空间 ≈ 1.27 MB
执行页压缩,命令如下:
效果对比:Users2 表压缩前 3.27 MB,压缩后 1.23 MB,如下图:

QQ截图20260109085055.jpg

可视化操作如下:

QQ截图20260109111806.jpg QQ截图20260109111909.jpg

参考:

超链接登录可见。
超链接登录可见。
超链接登录可见。




上一篇:数据库软删除(逻辑删除)之字段唯一性的问题
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-1-11 06:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表