PostgreSQL与MySQL对比

使用了一段时间的postgresql与mysql5.7,说一下目前的感受

MySQL优点

  • mysql的资料更多。因为使用的人多,大部分问题网上都有答案。并且很多大厂使用的是mysql,可以流出一些高质量的实战经验。
  • mysql的binlog解析出来更清晰,可以知道每一条执行语句。
  • mysql提供了一些不完全符合标准但更符合普通人思维的易用方法。
  • mysql的主从配置更简单
  • mysql可以调节字段的顺序

MySQL缺点

  • json功能弱
  • oracle掌管授权
  • 被linux排除,代替为mariadb。

PostgreSQL优点

  • postgresql的官方文档更详细清晰。
  • 强大的json功能
  • 更丰富的扩展和可配置性

PostgreSQL缺点

  • 资料相对较少,上手比mysql难
  • 增加了sequence,创建自增id多了一步
  • 增加了模式概念,增加了入门的疑惑
  • wal日志(类似于mysql的binlog)中无法解析出每次执行的sql语句,不能直观的知道应该恢复到什么位置。
  • 主从配置繁琐,主windows,从linux配置失败
  • postgresql为了性能以及实现的限制,不可以调节字段间前后的顺序
  • postgresql表中排序,默认使用更新的时间,而不是按照主键

结论

虽然PostgresSQL的json功能更强大,有一些功能更好用,但是由于其备份方面太麻烦,不方便,与MySQL比也是各有千秋,所以放弃继续使用。

2023-9更新

  • mysql有redo和undo日志,不会有表膨胀的问题。而postgresql没有redo undo日志,通过新加一条数据实现mvcc,当有事务执行,这时又有其他操作时,就会导致表膨胀(数据没变,占用空间增加),所以在插入或者更新频繁,查询也频繁的情况,很容易导致表膨胀,而表膨胀之后处理起来又非常麻烦。虽然postgresql意思到这个问题,也准备修复,就是增加redo undo日志,但是还在开发,仍没有加入到现有版本中

  • postgresql是多进程,mysql是多线程。虽然多进程可以更好的利用cpu资源,但是也会影响线程池等性能优化的方案实施。

  • mysql8增强了json的支持

  • mariadb从性能和使用上可以平替mysql

虽然postgresql被成为最流行的,最先进的数据库,但是我们是开发,是使用,最终还是要看哪个数据库资料多,易用性好,在这一点上postgresql并没有比mysql更优秀。postgresql偏向于学术,学术是为了研究新技术和方向,但并不一定适用于现在的环境。

在几个关键点上,postgresql并不好用

  • 自增id的设置。postgresql需要专门维护sequence来设置自增id,并且这个是一个全局的,与表是同一级别,多个自增id的sequence不能重名。并且sequence与表是独立的,即使不使用sequence,也会存在于数据库中,需要手动删除。
  • 增量备份日志的表达方式。mysql可以清楚知道执行的sql语句,在还原时,可以知道从哪里开始。因为出现问题,我们都会查找当时的逻辑,程序在哪里崩溃的,之前执行到哪里,操作了哪条语句,而postgresql无法给出sql语句,提供的是postgresql自己的一套表达方式。
  • 主从复制。因为mysql的bin log日志是sql语句,适用性更广,更好配置,而postgresql是wal日志,就是所说的,不是具体sql语句,跨系统有问题,配置主从也麻烦
  • 表膨胀。由于psotgresql为了简洁,一开始没有redo undo日志,导致实现mvcc的时候,使用了新增数据的方式,而出现了表膨胀的问题,并且一旦出现表膨胀,就很难释放空间。
  • 更严格的sql语法规则。虽然这个是对的,但是既然mysql中支持一些非sql规则的使用,并且大家都在用,就说明这些语法还是有存在意义的。还是那句话,我们是用,不是做学术,太学术就是教条,束缚了手脚。
  • 开源性。虽然mysql被oracle收购,但是mariadb可以做mysql的平替,由社区维护,响应更迅速。
  • 多进程/多线程。这两种方式并没有孰优孰劣,所以不能拿postgresql的多进程说比mysql的多线程优秀。很多大厂使用mysql,也能说明,这并不是问题。
  • 更多的扩展。postgresql还有一个被大家称道的优点,就是一个postgresql就是市面上所有的数据库集合,因为可以支持时序数据库,地图数据库等。但是专业的事还是由专业的人去做,什么都可以做,就说明什么都做不好,因为这本身就是一个悖论。由postgresql扩展而来的时序数据库TimescaleDB,性能就很差,无法与正规的时序数据库抗衡。

说到最后,感觉我对postgresql意见很大,其实不然。一开始接触postgresql的时候,我也是非常喜欢,觉着可以平替mysql,但是在使用中还是遇到各种问题,并且是对开发比较重要的功能,当然这并不是先入为主。

作为一个学院派的数据库,与面向商业的产品比较,还是有些区别的。当几千万上亿条数据遇到增量备份还原问题,遇到表膨胀问题时,一切象牙塔里的幻想都破灭了,因为我只想糊口饭吃。

posted @   秋来叶黄  阅读(2146)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示