zoukankan      html  css  js  c++  java
  • 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

    32139_12676723406Myu[1]

    一个人成就的大小与承担责任的多少是成正比
  • 相关阅读:
    UWP开发-获取设备唯一ID
    html5加js实现本地文件读取和写入并获取本地文件路径
    C/C++杂记:运行时类型识别(RTTI)与动态类型转换原理
    C/C++杂记:深入虚表结构
    C/C++杂记:虚函数的实现的基本原理
    C/C++杂记:深入理解数据成员指针、函数成员指针
    C/C++杂记:NULL与0的区别、nullptr的来历
    细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4
    汉字编码:GB2312, GBK, GB18030, Big5
    ANSI是什么编码?
  • 原文地址:https://www.cnblogs.com/qxoffice2008/p/4130691.html
Copyright © 2011-2022 走看看