在 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 中缩小或压缩?的主要内容,如果未能解决你的问题,请参考以下文章