为什么高性能场景选用Postgres SQL 而不是 MySQL

本文比较了MySQL和PostgreSQL在数据库领域的表现,包括性能差异、吞吐量、适用场景和各自的优势与劣势。PostgreSQL在复杂查询和性能上优于MySQL,但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 可以理解为命名空间,不影响使用

Note:
MySQL的层级关系:实例 -> 数据库 -> 表
Postgres 的层级关系:实例 -> 数据库 -> Schema -> 表
schema 可以理解为命名空间,不影响使用

二、性能对比

测试环境
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此次压测数据, 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的参数

### PostgreSQLMySQL 的关系 PostgreSQLMySQL 是两种广泛使用的关系型数据库管理系统(RDBMS),它们在技术架构、功能支持和适用场景上各有特点。尽管两者都用于存储和管理结构化数据,并支持 SQL 查询语言,但在设计理念和核心特性上存在显著差异。 PostgreSQL 被归类为对象-关系型数据库系统,允许用户将数据建模为具有属性的对象,这种设计方式支持如继承等面向对象编程的概念[^1]。它起源于伯克利的 POSTGRES 项目,该项目始于1986年,旨在推动数据库技术的发展,强调理论严谨性和对 SQL 标准的严格遵循。因此,PostgreSQL 在处理复杂查询、事务以及高级数据类型方面表现出色,适合需要高度定制化和长期稳定性的应用场景。 相比之下,MySQL 更倾向于传统的纯关系模型,虽然也引入了一些非标准扩展来增强其功能。MySQL 以其性能优势著称,特别是在读密集型操作中表现良好,这使得它成为Web应用后端常见的选择之一。此外,MySQL 提供了多种存储引擎选项,允许根据特定需求优化数据库行为。 两者之间的一个关键区别在于它们对待并发控制的方式不同:PostgreSQL 使用多版本并发控制(MVCC)机制确保高并发环境下的数据一致性;而 MySQL 则依赖于表级锁或行级锁机制实现类似的并发控制目标。同时,在复制方面,PostgreSQL 支持逻辑复制槽配置以满足更灵活的数据同步需求,而 MySQL 主要通过二进制日志进行主从复制设置。 从社区支持角度来看,PostgreSQL 社区鼓励模块化设计及社区驱动创新,促进了大量第三方扩展插件的发展;而 MySQL 尽管也有活跃的开源社区,但自从被 Oracle 收购之后,部分开发者转向了其分支版本如 MariaDB。 综上所述,PostgreSQLMySQL 各有优劣,具体选用哪一种取决于项目的实际需求。如果应用程序要求复杂的业务逻辑处理能力、丰富的数据类型支持以及良好的可扩展性,则可能更适合采用 PostgreSQL;而对于那些追求极致性能表现且不需要太多高级特性的简单应用场景来说,MySQL 或许是一个更为合适的选择。 ```sql -- 示例:创建一个带有继承关系的表结构(仅适用于 PostgreSQL) CREATE TABLE cities ( name text, population float ); CREATE TABLE capitals ( state char(2) ) INHERITS (cities); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值