mysql - 与 PostgreSQL 相比,为什么 Mysql 不需要真空?

标签 mysql postgresql vacuum

我对 PostgreSQL 比 MySQL 更熟悉。曾在 PostgreSQL 数据库中遇到一次环绕 Id 故障,然后理解了在数据库中清理的重要性。实际上,这是一个巨大的开销工作来处理(而且它是在几个月前更新的旧版本 7.4.3 中拥有 autovacuum)。在比较 MySQL 和 PostgreSQL 时,假设 MySQL 不必处理像 PostgreSQL 中的 vacuum 这样的开销。这个假设对吗?

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

最佳答案

Robert Haas wrote on this topic .

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

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

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

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

关于mysql - 与 PostgreSQL 相比,为什么 Mysql 不需要真空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25153532/

相关文章:

php - 使用 PDO 创建 session

sql - PostgreSQL:如何根据 WHERE 子句选择不同的关系并按不同字段排序?

python - sqlite 真空与 django

linux - PostgreSQL unix进程详解查询

python - 是否可以从 psycopg2 或 sqlalchemy 为 PostgreSQL 发出 "VACUUM ANALYZE <tablename>"?

sql - 如何有效地真空分析 Postgres 中的表

php - 在 2 个表中列出成员的所有内容(问题、答案)

MySQL 查询 - 看似奇怪的行为。这与浮点值有关吗?

mysql - SQL Server 中 Mysql 的 SHOW INDEX 替代方案是什么?

SQL:通过多个表获取客户的总份额