PgSQL与MySQL对比

PostgreSQL

PostgreSQL简介

PostgreSQL 是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高的声誉。目前PostgreSQL可以运行在所有主流操作系统上,包括Linux、Unix和Windows。

PostgreSQL 是完全的事务安全性数据库,支持丰富的数据类型(如JSON和JSONB类型、数组类型)和自定义类型。PostgreSQL数据库提供了丰富的接口,可以很方便地扩展它的功能,如可以在GiST框架下实现自己的索引类型,支持使用C语言写自定义函数、触发器,也支持使用流行的编程语言写自定义函数。

PgSQL与MySQL的区别

  1. PostgreSQL (通常称为PG)和MySQL都是广泛使用的关系型数据库管理系统(RDBMS)。虽然它们都是用于存储和管理数据的关系数据库,但它们在一些方面有很大的区别,如下所述:
  2. 数据类型:PostgreSQL支持更多的数据类型,如范围类型、网络地址类型、JSON和XML数据类型等,而MySQL则不支持这些类型。
  3. 扩展性:PostgreSQL具有很高的扩展性,可以使用自定义数据类型、函数和操作符来扩展其功能。而MySQL的扩展性较差,需要使用插件或存储过程来实现类似的功能。
  4. ACID兼容性:PostgreSQL是完全ACID兼容的数据库,而MySQL只在特定的存储引擎(如InnoDB)中支持ACID。
  5. 多版本并发控制(MVCC):PostgreSQL使用MVCC来提供高级事务隔离级别,这意味着多个事务可以同时读取和写入数据库,而不会相互干扰。MySQL也支持MVCC,但其实现方式不同。
  6. 存储引擎:MySQL支持多个存储引擎,包括MyISAM和InnoDB等。每种存储引擎都有自己的特点和优缺点。PostgreSQL仅支持单个存储引擎
  7. SQL标准兼容性:PostgreSQL更加符合SQL标准,而MySQL在某些方面采用了自己的实现方式。
  8. 性能:在一些特定的使用场景下,MySQL的性能可能更好。但在复杂的查询和高并发的情况下,PostgreSQL可能表现更好。

总之,PG 和 MySQL 都是出色的关系型数据库管理系统,具有不同的特点和优劣。选择哪个取决于具体的需求和使用场景。

从应用场景来说,PG更加适合严格的企业应用场景(比如金融、电信、ERP、CRM),而MySQL更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景(比如google、facebook、alibaba)。

PgSQL相对于MySQL的优势

  1. 在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨,比较学院化;
  2. 存储过程的功能支持要比MySQL好,具备本地缓存执行计划的能力;
  3. 对表连接支持较完整,优化器的功能较完整,支持的索引类型很多复杂查询能力较强
  4. PG具有丰富的json能力,Json和jsonb数据类型,使得PG对json操作更快更有效。同样可以在json数据列上建立B-tree索引和GIN索引。XML和HSTORE数据类型可以处理XML格式以及其他复杂text格式的数据对空间数据类型的支持,使得PG是一个完整的多模型数据库。
  5. PgSQL主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
  6. PgSQL的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。
  7. MySQL的存储引擎插件化机制,存在锁机制复杂影响并发的问题,而PgSQL不存在。
  8. Postgre SQL在性能上远远好于MYSQL, 通过上面的压测数据即可体现,无论是在耗时,还是在整体吞吐量上,有显著优势
  9. Postgre SQL在单行更新上有明显优势,尤其是启用了HOT UPDATE后, 性能比MYSQL高了一个数量级。
  10. MySQL 的事务隔离级别 repeatable read 并不能阻止常见的并发更新, 得加锁才可以, 但悲观锁会影响性能, 手动实现乐观锁又复杂。而 Postgre SQL 的列里有隐藏的乐观锁 version 字段, 默认的 repeatable read 级别就能保证并发更新的正确性, 并且又有乐观锁的性能。

MySQL相对于PgSQL的优势

1、innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制,是占优的。新老数据一起存放,需要定时触发VACUUM,会带来多余的IO和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀;

2、MySQL采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束;

3、MySQL的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作;

4、MySQL分区表的实现要优于PG的基于继承表的分区实现,主要体现在分区个数达到上千上万后的处理性能差异较大

5、MySQL的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了innodb适合事务处理场景外,myisam适合静态数据的查询场景。


事务和并发控制:

MySQL:MySQL支持基于行级别的并发控制,使用多版本并发控制(MVCC)机制来处理并发事务。它默认使用可重复读的隔离级别,但也支持其他隔离级别。MySQL的事务处理相对较简单。

PgSQL:PgSQL也支持多版本并发控制(MVCC),并提供更高级别的事务隔离级别它支持序列化隔离级别,可以确保更高程度的数据一致性和完整性。

复制和高可用性:

MySQL:MySQL提供了主从复制的支持,可以实现数据的异步复制和读写分离。它还提供了一些高可用性解决方案,如MySQL Group Replication和MySQL InnoDB Cluster。

PgSQL:PgSQL也支持主从复制,可以实现数据的异步复制和读写分离。PgSQL还提供了一些高可用性解决方案,如PgPool-II和PostgreSQL自带的逻辑复制功能。

参考文章:

https://www.cnblogs.com/JackpotHan/p/16620758.html#pgsql%E7%9B%B8%E5%AF%B9%E4%BA%8Emysql%E7%9A%84%E4%BC%98%E5%8A%BF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值