技术文章 > 数据库 > PostgreSQL > 正文

postgresql和mysql的区别是什么

爱喝马黛茶的安东尼

一、PostgreSQL相对于MySQL的优势

1、在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨;

2、存储过程的功能支持要比MySQL好,具备本地缓存执行计划的能力;

3、对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强;

4、PG主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。

5、PG的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。

6、MySQL的存储引擎插件化机制,存在锁机制复杂影响并发的问题,而PG不存在。

二、MySQL相对于PG的优势

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

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

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

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

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

三、用法区别

1、MySQL的各种text字段有不同的限制,需要手动区分small text,middle text, large text;pg没有该限制,可以支持text的各种大小。

2、按照SQL标准,null判断只能用is null,不能用 ==null;pg可以设置transform_null_equals 把 = null 翻译成 is null。

3、MySQL的事务隔离级别 repeatable read 并不能阻止常见的并发更新,得加锁才可以。但悲观锁会影响性能,手动实现乐观锁又复杂。而 Pg 的列里有隐藏的乐观锁 version 字段,默认的 repeatable read 级别就能保证并发更新的正确性,并且又有乐观锁的性能。附带一个各数据库对隔离级别的行为差异比较调查。

4、MySQL 不支持多个表从同一个序列中取 id,而 Pg 可以。

5、MySQL 不支持 OVER 子句,而 Pg 支持。OVER 子句能简单的解决“每组取 top 5” 的这类问题。几乎任何数据库的子查询 (subquery) 性能都比 MySQL 好。

6、pg它可以存储 array 和 json,可以在 array 和 json 上建索引,甚至还能用表达式索引。为了实现文档数据库的功能,设计了 jsonb 的存储结构。有人会说为什么不用 Mongodb 的 BSON 呢?Pg 的开发团队曾经考虑过,但是他们看到 BSON 把 [“a”,“b”,“c”] 存成 {0: “a”,1:“b”,2:“c”} 的时候就决定要重新做一个 jsonb 了,现在 jsonb 的性能已经优于 BSON。

总体上来说,开源数据库都不是很完善,商业数据库oracle在架构和功能方面都还是完善很多的。从应用场景来说,PG更加适合严格的企业应用场景(比如金融、电信、ERP、CRM),而MySQL更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景(比如google、facebook、alibaba)。

python学习网,大量的免费PostgreSQL教程,欢迎在线学习!

免费视频教程
本文原创发布python学习网,转载请注明出处,感谢您的尊重!
相关文章
 想安装PostgreSQL,看这篇也就够了
 一文了解什么是PostgreSQL
 一文了解PostgreSQL逻辑复制之pglogical模块
 postgresql是什么
相关视频章节
 网络爬虫
 云端部署Web应用程序视频
 Web应用框架Flask和文件模板
 Web应用程序开发概述
 继承和多态
作者信息

爱喝马黛茶的安东尼

You know nothing!

最近文章
centos7vim中文乱码怎么解决771
centos7怎么删除vim1469
centos7中vim怎么配置1516
推荐视频
视频教程分类