我正在使用Visual Studio 2008.我是sqlce的新手。我正在检查sdf文件,如果sdf不存在,我创建然后向我的sqlce db插入大约5000行。如果sdf存在,首先我删除所有表的行,然后将这些记录插入到已存在的表中。插入完成后,我压缩数据库。顺便说一下,压缩持续大约13秒。我知道一个调用Shrink.Shrink和Compact的方法使db变小但是在这个scenerio中哪个是我应该使用?如何在更短的时间内进行压缩?我不需要备份sdf和紧凑后,我删除旧的sdf.i阅读this主题但无法决定我应该使用它。
答案 0 :(得分:13)
请参阅:
引用SQL Server Compact Team Blog:
SqlCeEngine / ISSCEEngine:Shrink Vs Compact 之间的区别 这两者与内部很相似 和外部内存碎片。
来自SqlCeEngine.Shrink documentation:
回收数据库中浪费的空间 通过移动空和未分配的页面 到文件的末尾,然后 截断文件。您可以 自动配置数据库 通过设置自动收缩来缩小 连接字符串中的阈值选项。 收缩不会造成暂时的影响 数据库文件。
来自SqlCeEngine.Compact documentation:
回收数据库中浪费的空间 通过创建一个新的数据库文件 现有文件。通过创建一个新的 数据库的意思是,它回收了免费的 行之间的空间。
更清楚的是,Shrink声称 页面完全免费或 未分配的;契约声称 页面上浪费的空间也是如此。 因此Compact需要创建一个新的 数据库文件。
页面中的空白区域可以是 结果:
1)如果页面中有5行 其中两个被删除
2)如果中间有一排 更新所需的页面更多 空间,已移出页面(例如: nvarchar列更新)
空页面和未分配的页面 因此可能会留在数据库中 的:
1)页面中的所有行都被删除
2)整个表被删除