2014-05-18 35 views
0

我读到SQL服务器的行压缩功能通过仅使用存储给定值所需的字节来减少存储行所需的空间。如果不压缩,int列需要4个字节。只有存储数字1或100万时,我们才需要全部4个字节。在打开行压缩的情况下,sql server会查看存储的实际值并计算所需的存储量。了解SQL服务器中简单行压缩的概念

我不明白 - 为什么1和1mn需要全部4个字节,为什么其他大于1的数字需要更少的内存?

编辑 -它从书中采取:提供业务智能与SQL Server 2008

行压缩减少了存储数据的行所需的空间。它只用 使用存储给定值所需的字节。例如,在没有行压缩的情况下,类型为int的 列通常占用4个字节。如果我们存储的号码是 1或100万,那么这是真的。 SQL Server分配足够的空间来存储数据类型可能的最大值 。 打开行压缩时,SQL Server会进行更智能的空间分配。 它查看给定行中给定列的实际值,然后 确定表示该值所需的存储空间。这是完成到最接近的 整个字节。 当然,这种增加的复杂性会增加一些开销,因为在表中插入或更新数据 。当从 表中检索到数据时,它还会增加更少的开销。在大多数情况下,此额外处理所花费的时间可以忽略不计。实际上,在某些情况下,保存磁盘读取和磁盘写入时间甚至可能大于数据压缩所需的计算时间。

+0

你从哪里阅读了关于如何存储整数的部分? –

+0

当你认为错误的事情你不能问为什么它是错的。 –

+0

@MikaelEriksson - 请参阅我的编辑信息来源。 – Steam

回答

1

1和100万只是行压缩关闭时需要4个字节的值的示例。这并不意味着其他数字需要更少的空间。

1和100万可能被挑选为例子,因为1很小,一百万很大。

如果行压缩处于关闭状态,int将占用4个字节,无论它具有什么值。

2

你对此有错误的认识。请仔细阅读the docs

+0

好文件! –

+0

谢谢Endrju。请阅读我的编辑。 – Steam