C# SQL Server Compact Edition:非常高的压缩比率

4
我开发了一个.NET WPF应用程序,数据存储由SQL Server Compact Edition处理。我注意到当我压缩获得的SQL Server CE文件时,通常会将其压缩到原始文件大小的5%。这种情况是否符合预期行为?鉴于这种巨大的空间节省,似乎我应该每次保存时都压缩文件(我尚未考虑性能影响)。数据库大小可以从几MB变化到最大的4GB,尽管这种情况很少发生。我的数据存储效率低吗?或者为什么我在压缩时会得到如此显著的节省?有没有办法可以始终获得这种空间节省,而无需外部压缩SQL Server CE文件?

这是我所期望的初学者问题类型,没有任何需要感到羞愧的无知。这不是一个“我不想在文档中查找语法”的问题。答案显而易见,但只有了解数据库内部工作原理的人才能明白。因此,请不要感到羞愧,这实际上是一个好问题。 - TomTom
1个回答

3
一个数据库不应该被压缩,因为它会极大地影响检索性能。我会给您举个例子。
如果一个字段长度为200字节,数据库将保留200字节以保存特定行的值。它可以通过添加所有字段的长度来计算总行大小。
压缩算法可能会将实际值压缩到几乎为零。然而,如果一个数据库这样做,它就不能依靠计算在磁盘上的位置(行号*行大小+列偏移量)。它必须首先解压缩所有内容才能获取特定行的特定列的值。出于性能考虑,您不希望这样。

1
通常情况下,数据库会有很多空余空间。为插入等操作预先分配一些保留空间是必要的。例如,索引并不总是完全填满,因此插入操作不会总是触发页面分裂(它们是按页组织和分配的)。 - TomTom
谢谢。你能推荐一些相关的阅读资料吗?我对 SQL 的运作机制理解得还很有限。 - User_FSharp1123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接