我对PostgreSQL比对MySQL更熟悉.我曾经在PostgreSQL数据库中遇到过一次环绕Id失败,然后理解了数据库中清空的重要性.事实上,这是一个巨大的开销工作要处理(这是一个旧版本7.4.3,几个月前更新为autovacuum).在比较MySQL和PostgreSQL时,假设MySQL不必处理PostgreSQL中的真空等开销.这个假设正确吗?

还有,为什么MySQL Dbs与PostgreSQL相比不需要真空?MySQL dbs还有其他类似的优化方案吗?

推荐答案

Robert Haas wrote on this topic

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

这意味着要在更新时执行更多的写入操作,并使对旧行版本的访问速度大大降低,但消除了异步真空的需要,也意味着不会出现表inflating 问题.相反,您可以拥有巨大的回滚段,或者回滚空间不足.

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

如果你说的是MyISAM桌子,那就完全不同了.PostgreSQL的表不会吃掉你的数据.米萨姆会的.PostgreSQL的表是事务性的.MyISAM不是.平面文件也不需要VACUUM,这不是一个好主意.

Postgresql相关问答推荐

将real[]数组作为完整的浮点值从postquist返回

在同一 Select 列表中两次使用jsonb_arrayElements()是否安全?

可以向判断枚举值的SQL列添加约束吗?

Psql:Windows 10上奇怪的错误输出编码

数据库所有者无法授予 Select 权限

使用来自 docker 图像的 postgres 设置 Keycloak 21

在 postgresql 中查找表的所有依赖项

Psycopg2 在大型 Select 查询中耗尽内存

从 sql 查询 postgres 9.4 创建嵌套 json

PostgreSQL ,从 2 个表中 Select ,但仅从表 2 中 Select 最新的元素

Rails 4查询由单个属性唯一

从 PostgreSQL 中的字段中提取数字

在 row_to_json 函数中 Select 查询

在不存在的行上有select for update块

从没有行的计数中获取 0 值

如何为 postgres 连接设置 application_name?

获取json列键为空的记录

Postgresql滚动删除旧行?

错误:permission denied for language c

错误:无法在只读事务中执行 CREATE TABLE