当前位置: 首页 > news >正文

PostgreSQL与MySQL,谁更胜一筹

前言

PostgreSQL与MySQL都是优秀的开源数据库。在日常学习中,新手可能接触最多的是MySql,但是实际工作中,两者的应用场景其实都很广。我之前的做过上网流量销售业务,用的是MySQL,现在接触广告业务,用的是pg数据库,每天广告的pv数据都是在亿级别,下面简单分享一下这两者之间的一些区别吧,不是很全面,但是可以了解一下,说不定后续用的上,至少吹牛逼的时候,你吹的逼格别人高一些。

性能对比

数据库版本和环境配置

MySQLPG
数据库版本MySQL 8.0Postgres SQL 13
硬件配置4核心 16GB4核心 16GB

测试说明

SELECT 均为SELECT 按照主键查询,UPDATE按照主键进行UPDATE,INSERT则为一次INSERT一行数据。

小结

平均耗时

Postgres SQL优于MySQL不止数倍

吞吐量

Postgres SQL 在SELECT性能上优于MySQL一倍, 在INSERT上优于4-5倍, UPDATE 则优5-6倍

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

使用场景对比

MySql的适用场景

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

Postgres SQL适用的场景

总的来说,Postgre SQL更适合复杂的数据结构、高级应用和大规模数据集,当然如果数据规模比较小,也可以选择Postgres SQL,无论是什么场景,如果你想用Postgres SQL,总可以找到对应的解决方法。有的人说pg没有mysql好用,只是使用的姿势不太正确,用起来还是很香的。

优劣势对比

PG的优势

性能不同: 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 级别就能保证并发更新的正确性, 并且又有乐观锁的性能。这一点真的很不错,日常广告数据因为它有这一点优势,省了很多的麻烦。

PG相对MySQL的劣势

(1)Postgre SQL 存在vacuum,需要根据具体使用场景,来调整vacuum的参数。

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

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

写在最后

这里仅仅对两者进行一些对比,两者各有千秋,都很优秀。还是那句话,适用于你们业务场景的选择就是最好的选择。后续对Mysql和Pg的一些容易踩坑的点进行汇总再分享出来,工作中经常容易踩坑。

好了,今天的内容就分享到这里,更多干货持续输出中。分享不易,觉得有点收获的话,帮忙点赞加在看,你的点赞是我们持续输出的动力,下期再见!

相关文章:

  • Linux CentOS stream 9 firewalld
  • 15.一种坍缩式的简单——组合模式详解
  • 【MATLAB源码-第144期】基于matlab的蝴蝶优化算法(BOA)无人机三维路径规划,输出做短路径图和适应度曲线。
  • 【鸿蒙 HarmonyOS 4.0】数据持久化
  • 【Git】 删除远程分支
  • Java实现Redis延时队列
  • 【机器学习】是什么?
  • 3.测试教程 - 基础篇
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • AI智能制作ER图技术革新:itBuilder引领数据库设计新篇章
  • 记一次重大的问题解决
  • kali xrdp
  • STM32—触摸键
  • 我们在SqlSugar开发框架中,用到的一些设计模式
  • 光学相干断层扫描(OCT)在 妇科诊断 中的革命性应用
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • CSS 三角实现
  • ECMAScript入门(七)--Module语法
  • ES6--对象的扩展
  • Invalidate和postInvalidate的区别
  • JWT究竟是什么呢?
  • Node 版本管理
  • PV统计优化设计
  • Python_网络编程
  • Python学习之路16-使用API
  • React系列之 Redux 架构模式
  • supervisor 永不挂掉的进程 安装以及使用
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 算法---两个栈实现一个队列
  • 提醒我喝水chrome插件开发指南
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #define与typedef区别
  • #pragma pack(1)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (NSDate) 时间 (time )比较
  • (八)c52学习之旅-中断实验
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四)c52学习之旅-流水LED灯
  • (转)树状数组
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • *2 echo、printf、mkdir命令的应用
  • *上位机的定义
  • .htaccess配置重写url引擎
  • .naturalWidth 和naturalHeight属性,
  • .NET DataGridView数据绑定说明
  • .NET Framework .NET Core与 .NET 的区别
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [AIGC] MySQL存储引擎详解
  • [android] 手机卫士黑名单功能(ListView优化)