PostgreSQL与MySQL,谁更胜一筹

news/2024/7/9 20:41:06 标签: 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的一些容易踩坑的点进行汇总再分享出来,工作中经常容易踩坑。

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


http://www.niftyadmin.cn/n/5388691.html

相关文章

精通PyTorch:如何选择合适的优化器和损失函数

精通PyTorch:如何选择合适的优化器和损失函数 引言PyTorch优化器概览PyTorch损失函数解析高级优化技巧优化器和损失函数的实战应用1. 卷积神经网络(CNN)的应用实例2. 循环神经网络(RNN)的应用实例3. 优化过程中的常见问…

爬虫项目(下)

1..string 属性是用来获取节点中标签内容。 for content in content_all:contentString content.stringprint(contentString) .string 属性只能提取单个节点或节点统一的内容。 提取节点包含多个子节点时:使用这个属性时,不清楚应该调用哪个节点的内容&#xff…

【Unity】MySql +Navicat 安装教程

问题描述 在使用Unity开发的时候,有的时候我们是需要使用Mysql数据库的,本教程使用的MySql 和Navicat均为免安装版 ❶mysql安装 1.下载mysql解压至任意目录,此处以“C:\mysql-5.6.39-winx64”为例. mysql百度云连接: 链接&…

electron桌面开发相关注意点

electron的部署以及配置 如果使用的是pnpm,请先配置一下镜像,否则会安装失败的: pnpm config set registryhttps://registry.npmmirror.com pnpm config set electron_mirrorhttps://cdn.npmmirror.com/binaries/electron/ pnpm config set …

外包干了3个月,技术退步明显

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

大数据 - Spark系列《七》- 分区器详解

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《…

go-zero微服务入门教程

go-zero微服务入门教程 本教程主要模拟实现用户注册和用户信息查询两个接口。 准备工作 安装基础环境 安装etcd, mysql,redis,建议采用docker安装。 MySQL安装好之后,新建数据库dsms_admin,并新建表sys_user&#…

Vue单文件学习项目综合案例Demo,黑马vue教程

文章目录 前言一、小黑记事本二、购物车三、小黑记账清单 前言 bilibili视频地址 一、小黑记事本 效果图 主代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible&…