SQL Server CE 中的 Shrink 和 Compact 有啥区别?

Posted

技术标签:

【中文标题】SQL Server CE 中的 Shrink 和 Compact 有啥区别?【英文标题】:What is the difference between Shrink and Compact in SQL Server CE?SQL Server CE 中的 Shrink 和 Compact 有什么区别? 【发布时间】:2009-04-01 22:40:04 【问题描述】:

我有一个定期运行的方法来优化我的应用程序的 SQL Server Compact Edition (3.5) 数据库。现有代码使用 Shrink() 方法:

        SqlCeEngine engine = new SqlCeEngine(dbConnectionString);
        engine.Shrink();

今天我注意到还有一个 Compact() 方法。哪个更适合定期维护?

【问题讨论】:

【参考方案1】:

来自SQL Server Compact Team Blog:

这两者的区别是 非常类似于内部和外部 内存碎片。

来自SqlCeEngine.Shrink 文档,

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

来自SqlCeEngine.Compact 文档,

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

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

【讨论】:

以上是关于SQL Server CE 中的 Shrink 和 Compact 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server Transaction Log Truncate && Shrink

SQL Server CE 中的正确日期时间格式?

DB太大?一键帮你收缩所有DB文件大小(Shrink Files for All Databases in SQL Server)

DB太大?一键帮你收缩所有DB文件大小(Shrink Files for All Databases in SQL Server)

用于多个应用程序中的 C# 类库的 SQL Server CE 私有部署

选择 SQL Server CE 中的前两个字符