在 Sql Server CE 中缩小或压缩?

Posted

技术标签:

【中文标题】在 Sql Server CE 中缩小或压缩?【英文标题】:shrink or compact in Sql Server CE? 【发布时间】:2009-10-18 11:13:06 【问题描述】:

我正在使用 Visual Studio 2008。我是 sqlce 的新手。我正在检查 sdf 文件,如果 sdf 不存在,我创建然后将大约 5000 行插入到我的 sqlce db。如果 sdf 存在,首先我删除所有表行,然后将这些记录插入到现有表中。插入完成后,我正在压缩数据库。顺便说一下,压缩持续大约 13 秒。我知道一个调用 Shrink.Shrink 和 Compact 的方法使数据库更小,但在这个场景中,它们中的哪一个我应该使用吗?我怎样才能使压缩时间更短?我不需要备份 sdf,压缩后,我删除了旧的 sdf。我阅读了this 主题但无法决定我应该使用哪个。

【问题讨论】:

【参考方案1】:

请看:

What is the difference between Shrink and Compact in SQL Server CE?

引用SQL Server Compact Team Blog:

SqlCeEngine/ISSCEEngine: Shrink Vs Compact 两者的区别 这两个与内部非常相似 和外部内存碎片。

来自SqlCeEngine.Shrink documentation:

回收数据库中浪费的空间 通过移动空的和未分配的页面 到文件末尾,然后 截断文件。你可以 将数据库配置为自动 通过设置自动收缩来收缩 连接字符串中的阈值选项。 收缩不会创建临时 数据库文件。

来自SqlCeEngine.Compact documentation:

回收数据库中浪费的空间 通过创建一个新的数据库文件 现有文件。通过创建一个新的 数据库意味着,它回收免费的 行之间的空间。

更清楚地说,Shrink 声称 完全免费的页面或 未分配;其中,Compact 声称 页面中也浪费了空间。 因此 Compact 需要创建一个新的 数据库文件。

页面中的空白区域可能是 结果:

1) 如果一个页面有 5 行 其中两个被删除了

2) 如果中间有一行 更新时需要更多信息的页面 空间,已移出页面(例如: nvarchar 列更新)

空页和未分配页 结果可能会保留在数据库中 的:

1) 页面中的所有行都被删除

2) 整个表被删除

【讨论】:

以上是关于在 Sql Server CE 中缩小或压缩?的主要内容,如果未能解决你的问题,请参考以下文章

您应该多久压缩一次 SQL CE 数据库?

Win10 下卸载sql server 2012的问题

sql server 数据库怎样压缩数据库日志文件

C++ 基于ZLIB压缩库的数据或文件的压缩与解压缩小程序

SQL Server使用xp_cmdshell提示“不是内部或外部命令,也不是可运行的程序 或批处理文件”

SQL Server 2008中的数据压缩