在Sql Server CE中收缩还是压缩?

Ale*_*der 7 .net sql-server-ce

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

Mit*_*eat 13

请参阅:

来自SQL Server Compact团队博客的引用:

SqlCeEngine/ISSCEEngine:Shrink Vs Compact 这两者之间的差异与内部和外部内存碎片非常相似.

SqlCeEngine.Shrink文档:

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

SqlCeEngine.Compact文档:

通过从现有文件创建新数据库文件来回收数据库中浪费的空间.通过创建新的数据库手段,它可以回收行之间的可用空间.

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

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

1)如果页面中有5行,则删除其中两行

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

由于以下原因,空页面和未分配的页面可能会保留在数据库中:

1)删除页面中的所有行

2)丢弃整个桌子