31

我对 PostgreSQL 比对 MySQL 更熟悉。曾经在 PostgreSQL 数据库中遇到过环绕 ID 失败,然后了解了在数据库中进行清理的重要性。实际上,这是一项需要处理的大量开销工作(而且它是使用旧版本 7.4.3 进行的,几个月前更新了 autovacuum)。在比较 MySQL 和 PostgreSQL 时,假设 MySQL 不必处理像 PostgreSQL 中的真空这样的开销。这个假设正确吗?

另外,与 PostgreSQL 相比,为什么 MySQL Dbs 不需要真空?MySQL dbs 是否存在其他类似于 Vacuum 的优化替代方案?

4

2 回答 2

22

罗伯特哈斯就这个话题写过文章

简短的版本是 InnoDB 使用回滚日志,更像 Oracle 的设计。只有最新版本的行保留在主表中。它必须管理日志清除,这是一种异步/延迟操作,具有与 PostgreSQL 的VACUUM.

这意味着要在更新时进行更多的写入操作,并使对旧行版本的访问速度要慢得多,但消除了对异步真空的需求,并且意味着您不会遇到表膨胀问题。相反,您可以拥有巨大的回滚段或用完回滚空间。

所以这是一种权衡,一种具有不同优势和问题的设计。

如果您谈论的是 MyISAM 表,那么它就完全不同了。PostgreSQL 的表不会吃掉你的数据。MyISAM 会。PostgreSQL 的表是事务性的。MyISAM 不是。平面文件也不需要VACUUM,这不是一个好主意。

于 2014-08-06T07:52:11.883 回答
21

PostgreSQL 的 MySQL 近似值vacuumOPTIMIZE TABLE tablename( MySQL docs )。它在 MySQL 中执行与 PostgreSQL 类似的功能,根据使用的存储引擎,它回收未使用的空间,重新组织索引和表,并对数据文件进行碎片整理。您绝对应该像vacuum在 PostgreSQL 中一样定期运行它。

于 2014-08-06T06:48:34.713 回答