news 2026/7/3 16:12:55

面试官:为什么高性能场景选用 PostgresSQL 而不是 MySQL?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面试官:为什么高性能场景选用 PostgresSQL 而不是 MySQL?

一、 数据库简介 TLDR

1.1 MySQL

MySQL声称自己是最流行的开源数据库,它属于最流行的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。LAMP中的M指的就是MySQL。构建在LAMP上的应用都会使用MySQL。

MySQL最初是由MySQL AB开发的,然后在2008年以10亿美金的价格卖给了Sun公司,Sun公司又在2010年被Oracle收购。Oracle收购导致MySQL的出现两个版本:商业版和社区版。对于后者,由于Oracle控制了MySQL的开发,受到了广大使用者的批评。

1.2 PostgreSQL

PostgreSQL标榜自己是世界上最先进的开源数据库,属于关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统,最初是1985年在加利福尼亚大学伯克利分校开发的,作为Ingres数据库的后继。PostgreSQL是完全由社区驱动的开源项目。

它提供了单个完整功能的版本,而不像MySQL那样提供了多个不同的社区版、商业版与企业版。PostgreSQL基于自由的BSD/MIT许可,组织可以使用、复制、修改和重新分发代码,只需要提供一个版权声明即可。

Note:

MySQL的层级关系:实例 -> 数据库 -> 表

Postgres 的层级关系:实例 -> 数据库 -> Schema -> 表

schema 可以理解为命名空间,不影响使用

二、性能对比

测试环境

MySQL:

  • 硬件配置:4核心 16GB内存

  • 版本:MySQL 8.0

Postgres SQL:

  • 硬件配置:4核心 16GB内存

  • 版本:Postgres SQL 13

此次压测数据, SELECT 均为SELECT 按照主键查询,UPDATE按照主键进行UPDATE,INSERT则为一次INSERT一行数据。从压测数据上来看,我们可以得出以下几个结论:

  • 在吞吐量上而言,Postgres SQL 在SELECT性能上优于MySQL一倍, 在INSERT上优于4-5倍, UPDATE 则优5-6倍

  • 从平均耗时上来看, Postgres SQL优于MySQL不止数倍

  • 尤其从热点行更新上看出,MySQL性能仅为Postgres SQL的,1/8左右,耗时也增加了7倍

三、适用场景,如何选择?

相对于Postgres MySQL更简单, 所以有着更高的流行度, 在技术资料,以及技术组件支持上,支持的也更完善一些, 但不意味着它并不是不能替代的,于笔者而言, MYSQL更像用于中小企业、个人的一款数据库工具, 因为会的人多,文档资料比较完善,所以入手难度低。

但这些并不意味着MYSQL是最好的。

从上图来看Postgres SQL的发展势头非常迅猛,目前已经隐隐有追上MySQL的趋势, 而MySQL相对而言,使用情况受欢迎度一直呈现下降趋势。

MySQL适用的场景

MySQL适用于简单的应用场景,如电子商务、博客、网站等, 大中小型系统均可以使用MySQL,它最高支持千万级别到数亿级别的数据量,但是在高性能要求的情况下,比如较快的响应和较高的吞吐量的时候,MYSQL的性能稍微捉襟见肘,另外,在查询条件比较复杂、业务吞吐量要求不高,响应时长无要求,的时候,可以选择MYSQL。

Postgres SQL适用的场景

总的来说,Postgre SQL更适合复杂的数据结构、高级应用和大规模数据集,当然如果数据规模比较小,也可以选择Postgres SQL,无论是什么场景,如果你想用Postgres SQL,总可以找到对应的解决方法,有且仅有,在查询条件比较复杂,的时候不太适用,因为根据我们实际线上的业务表现是 Postgre SQL可能会选错索引。

四、总结

PostgreSQL相对于MySQL的优势:

  • Postgre SQL在性能上远远好于MYSQL, 通过上面的压测数据即可体现,无论是在耗时,还是在整体吞吐量上,有显著优势

  • Postgre SQL在单行更新上有明显优势,尤其是启用了HOT UPDATE后, 性能比MYSQL高了一个数量级

  • 在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨,比较学院化;

  • Postgre SQL主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。

  • Postgre SQL的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。

  • MySQL 的事务隔离级别repeatable read并不能阻止常见的并发更新, 得加锁才可以, 但悲观锁会影响性能, 手动实现乐观锁又复杂. 而 Postgre SQL 的列里有隐藏的乐观锁 version 字段, 默认的repeatable read级别就能保证并发更新的正确性, 并且又有乐观锁的性能。

Postgre SQL之于MySQL相对劣势:

  • Postgre SQL系统表设计相对复杂, 在进行一些系统表的统计、操作等方面比较复杂

  • Postgre SQL 的索引选择方面,选错的概率稍高一些(实测), 而且不能跟mysql 一样方便的使用force_index

  • Postgre SQL 存在vacuum,需要结合具体使用场景,来调整vacuum的参数

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 2:17:04

新版通达信多空主力拉升1主图2副1选股指标套装工具

新版通达信多空主力拉升1主图主力拉升主图指标源代码 SWL:(EMA(C,10)*7EMA(C,20)*3)/10; SWS:DMA(EMA(C,20),MAX(1,100*SUM(VOL,5)/(3*CAPITAL))),COLORWHITE,DOTLINE; MA5:MA(C,5),COLORWHITE,DOTLINE; DRAWBAND(SWL,RGB(255,50,50),SWS,RGB(64,204,208)); DRAWKLINE(H,O,L,C)…

作者头像 李华
网站建设 2026/7/1 2:16:38

keycloak~关于iframe方式对接keyclock的注意事项

keycloak作为统一的认证中心,提供了单点登录的能力,一般可以通过超链的方式打开keycloak登录页,这对于不同域名来说,是没有任何问题的;第二种对接方式是通过iframe方式,当你的网站与keycloak不同域名时&…

作者头像 李华
网站建设 2026/7/1 2:15:44

政务云边界安全体系如何构建?跨网数据合规流转实践解读

一、前言随着“互联网政务服务”的持续推进,政务信息系统正从传统的封闭内网运行,稳步走向面向公众开放的深度交互模式。统一身份认证、移动端办事入口等业务的上线,标志着业务访问路径已从“内部流转”演变为“外部接入内部处理”的新形态。…

作者头像 李华
网站建设 2026/7/1 2:13:27

WebSocket 连接完整流程连接建立阶段

<!-- websocket: 提供了对 WebSocket 协议的支持 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>简单的前后端WebSocket连接示例WebSocket 连…

作者头像 李华
网站建设 2026/7/3 7:27:49

变量与算数表达式

回顾这个问题的我们应该怎样去解决呢&#xff1f;我的标注&#xff0c;就是需要解决问题的原因&#xff1a;一、问题首先出现main函数这一行。二、main未命名类型。然后进行修改&#xff0c;第一次的训练是比较简单呢&#xff0c;主要代码的类别&#xff0c;以及代码的规范。第…

作者头像 李华
网站建设 2026/7/1 2:08:47

脑手分离:Agent系统的基础设施进化

一个被迫的架构选择 想象这样一个场景&#xff1a;你的Agent系统在生产环境里跑了一天&#xff0c;突然容器崩溃了。不是业务逻辑的问题&#xff0c;就是这个容器死了。最恐怖的不是容器重启——而是会话丢失了。用户的整个工作上下文、已执行的步骤、中间结果&#xff0c;全部…

作者头像 李华