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
DB太大?一键帮你收缩所有DB文件大小(Shrink Files for All Databases in SQL Server)
DB太大?一键帮你收缩所有DB文件大小(Shrink Files for All Databases in SQL Server)