我对PostgreSQL比MySQL更熟悉。在使用PostgreSQL数据库时遇到过一次环绕式Id故障,然后了解了在数据库中进行清理的重要性。实际上,这是一项巨大的开销工作(而且是使用旧版本7.4.3,该版本在几个月前进行了更新,以实现自动真空)。在比较MySQL和PostgreSQL时,假设MySQL不必处理像PostgreSQL中的vacuum这样的开销。这个假设是正确的吗?
另外,为什么与PostgreSQL相比,MySQL Dbs不需要真空?MySQL数据库还有没有类似vacuum的优化方案?
发布于 2014-08-06 15:52:12
Robert Haas wrote on this topic。
简而言之,InnoDB使用回滚日志,更像甲骨文的设计。只有行的最新版本保留在主表中。它必须管理日志清除,这是一个与PostgreSQL的VACUUM相关函数的异步/延迟操作。
这意味着在更新时要做更多的写操作,并使访问旧的行版本变得非常慢,但是消除了异步真空的需要,这意味着您不会有表膨胀的问题。取而代之的是,你可以有巨大的回滚段,或者没有足够的回滚空间。
因此,这是一种权衡,一种具有不同优点和问题的设计。
如果您谈论的是MyISAM表,那么它就完全不同了。PostgreSQL的表不会吃掉你的数据。MyISAM会的。PostgreSQL的表是事务性的。MyISAM不需要。平面文件也不需要VACUUM,这不是一个好主意。
发布于 2014-08-06 14:48:35
PostgreSQL的vacuum的MySQL近似值是OPTIMIZE TABLE tablename (MySQL docs)。它在MySQL中执行与PostgreSQL类似的功能,根据使用的存储引擎,它回收未使用的空间、重新组织索引和表以及整理数据文件碎片。您绝对应该像PostgreSQL中的vacuum一样定期运行它。
https://stackoverflow.com/questions/25153532
复制相似问题