前言
PostgreSQL与MySQL都是优秀的开源数据库。在日常学习中,新手可能接触最多的是MySql,但是实际工作中,两者的应用场景其实都很广。我之前的做过上网流量销售业务,用的是MySQL,现在接触广告业务,用的是pg数据库,每天广告的pv数据都是在亿级别,下面简单分享一下这两者之间的一些区别吧,不是很全面,但是可以了解一下,说不定后续用的上,至少吹牛逼的时候,你吹的逼格别人高一些。
性能对比
数据库版本和环境配置
MySQL | PG | |
---|---|---|
数据库版本 | MySQL 8.0 | Postgres SQL 13 |
硬件配置 | 4核心 16GB | 4核心 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的一些容易踩坑的点进行汇总再分享出来,工作中经常容易踩坑。
好了,今天的内容就分享到这里,更多干货持续输出中。分享不易,觉得有点收获的话,帮忙点赞加在看,你的点赞是我们持续输出的动力,下期再见!