SQL Server 2008行数据和页数据压缩解密

SQL Server的性能主要取决于磁盘I/O效率,提高I/O效率某种程序上就意味着提高性能。SQL Server 2008提供了数据压缩功能来提高磁盘I/O。

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

数据压缩可以在两个级别上实现:行级别和页级别。页级别压缩包括行级别压缩。表和索引在创建的同时就可以压缩,也可以使用Alter Table Rebuild With 或是 Alter Index Rebuild With语法压缩已存在表或是索引。当堆(Heap)上的压缩状态改变时,所有的非聚集索引也会重建。

下面让我们看看压缩过程到底都做了些什么。

行压缩:

  • 1.减少元数据头记录数据。
  • 2.所有的数值类型(integer,decimal,float)或基于数值类型的类型都会被压缩(datetime,money)。比如,100被存在一个int型字段中,占4位,但是从0~255只需要1位,压缩后,就节省了3byte空间。
  • 3.Char和NChar都被存放于可变长度的类型中。原因同上。比如,CSDN被存在Char(10)中,但是它只需要Char(4)空间,所以压缩后就释放了Char(6)个空间。
  • 4.所有类型的NULL和0都不占字节了。

页压缩:

  • 1.进行行压缩。
  • 2.前标压缩:每一页中的所有列,在行标头下面,每行都存储着一个行定义值,压缩后,所有行的定义值都被替换成行头值的引用。
  • 3.字典压缩:字典压缩和前标压缩类似。前标压缩中,一个与其他普通值不同的值被定义到每一列上。但是字典压缩中,每一页中所有列的普通值被存在下一行的行头前面。然后,这些值被替换成新行的引用值。

下面我们来看一个例子:

USE tempdb
GO
CREATE TABLE TestCompression (col1 INT, col2 CHAR(50))
GO
INSERT INTO TestCompression VALUES (10, ‘compression testing‘)
GO 5000
-- Original
EXEC sp_spaceused TestCompression
GO
-- DATA_COMPRESSION = ROW
ALTER TABLE TestCompression
REBUILD WITH (DATA_COMPRESSION = ROW);
GO
EXEC sp_spaceused TestCompression
GO
-- DATA_COMPRESSION = PAGE
ALTER TABLE TestCompression
REBUILD WITH (DATA_COMPRESSION = PAGE);
GO
EXEC sp_spaceused TestCompression
GO
-- DATA_COMPRESSION = NONE
ALTER TABLE TestCompression
REBUILD WITH (DATA_COMPRESSION = NONE);
GO
EXEC sp_spaceused TestCompression
GO

时间: 2024-08-28 10:22:28

SQL Server 2008行数据和页数据压缩解密的相关文章

SQL Server 2008将数据导出为脚本

从SQL SERVER 2008开始,我们就可以很方便的导出数据脚本,而无需再借助存储过程 (但是SQL Server 2012和SQL Server 2008的导出脚本的过程还有一点细微的差别) 开始: 选择要操作的数据库--右键-->任务--->生成脚本 然後下一步>> 这个编写数据脚本改为是true,表示是表里的数据也一起生成sql脚本 然後再下一步>> 这里可以自己选择,然后下一步>> 然後下一步>> 這裡自己选择脚本的保存路径 , 然后

(转)SQL Server 2008将数据导出为脚本 [SQL Server]

之前我们要将一个表中的数据导出为脚本,那么只有在网上找一个导出数据的Script,然后运行就可以导出数据脚本了.现在在SQL Server 2008的Management Studio中增加了一个新特性,除了导出表的定义外,还支持将表中的数据导出为脚本.导出过程: 在SSMS2008(SQL Server Management Studio 2008)中的对象资源管理器中,右击需要导出数据的数据库,在弹出式菜单中选择“任务”下的“生成脚本”选项. 在脚本向导的选择脚本选项中,有以下重要选项可以选

Sql Server 2008 导出数据到Oracle数据库

1 2 3 4 5 选定指定表 6 点击编辑映射 编辑目标数据类型 做一些必要的调整 6.1 源类型 目标类型 sql server 2008              oracle timestamp     date varchar                           varchar2(长度尽量长) number                         number (精度要设置合理) char varchar2(长度设置合理) 还要把 可以设置为NULL都勾选上 7

如何获取SQL Server 2008数据库数据文件的位置

在SQL Server中,要获取数据库数据文件的物理位置,有三种方法: sp_helpdb bright name          filename                        filegroup         size ------------- ------------------------------- ---------- ----------- Bright        Z:\MSSQL\data\Bright.mdf        PRIMARY    10

分享Sql Server 2008 r2 数据备份,同步服务器数据(一.本地备份)

最近在部署一个系统,处于数据安全的考虑,因此对相应的数据库服务器定时备份,以及数据同步到备份服务上.之前在另外的一个项目中也做过相应的操作,但是操作都是按照查找到的文章一步一步的操作,碰到一些细节问题没有记录下来,因而在这次部署过程中在碰到同样问题的时候自乱脚步,耽误了很多时间 避免下次需要处理相同情况下能够调高自己效率,特记录这一些操作过程 主要备份处理有: 1.Sql Server 代理->作业 通过脚本的方式,通过调用sql自带的备份服务备份数据库文件到本地 2.复制->本地订阅  本地

SQL Server 2008 导出数据与导入数据任务介绍

引用:https://www.cnblogs.com/fuhaots2009/p/3464983.html 一. 实例数据库介绍 源数据库Test_Other_DB:存在tb_Class,tb_Student,tb_TestTable三张表. 目标数据库TestDB_Output:空库,不含任何表. 二. 实例内容介绍 实例目标: 将源数据库Test_Other_DB中的表tb_Class,tb_Student导入到目标数据库TestDB_Output中. 实现方式: >>使用"导出

sql server多行数据(一列)转换成一个字段

create table #test ( id int not null, memeo int not null ) insert into #test(id,memeo) values(1,100) insert into #test(id,memeo) values(2,200) insert into #test(id,memeo) values(3,300) SELECT STUFF((SELECT ','+cast(memeo as nvarchar(20)) FROM #test f

sql server 2008 r2各个版本的区别与选择

转自:https://blog.csdn.net/kasama1953/article/details/52522921 目前已知的SQL Server 2008 R2的版本有: 企业版.标准版.工作组版.Web版.开发者版.Express版.Compact 3.5版. 这个次序也是各个版本功能的强大程度从高到低的一个排序.具体使用哪个版本,并非是约强大越好,而是应该使用适合的版本.很多初级开发者,比如笔者我,对这些版本的具体含义往往并不是十分清楚,所以我今天就从几篇博文中,将自己所看到的精华部

SQL Server 2008数据库的一些基本概念 区、页、行

原文地址:http://www.cnblogs.com/liuzhendong/archive/2011/10/11/2207361.html 以前总是没弄明白这些基本概念,现在整理如下: 1.区: 区是SQL Server 中管理空间的基本单位. 一个区是八个物理上连续的页(即 64 KB),所有页都存储在区中, 这意味着 SQL Server 数据库中每 MB 有 16 个区.一旦一个区段已满, 下一条数据Sql server将分配一个区段空间, 防止每次添加都要分配空间. 2.页(Page