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

时间:2009-10-18 11:13:07

标签: .net sql-server-ce

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

1 个答案:

答案 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)整个表被删除