MySQL和PostgreSQL区别


MySQL

MySQL相对来说比较年轻,首度出现在1994年。MySQL就是LAMP(用于Web开发的软件包,包括 Linux、Apache及Perl/PHP/Python)中的M。构建在LAMP栈之上的大多数应用都会使用MySQL,包括那些知名的应用,如 WordPress、Drupal、Zend及phpBB等。

一开始,MySQL的设计目标是成为一个快速的Web服务器后端,使用快速的索引序列访问方法(ISAM),不支持ACID。经过早期快速发展之后,MySQL开始支持更多的存储引擎,并通过InnoDB引擎实现了ACID。MySQL还支持其他存储引擎,提供了临时表的功能(使用MEMORY存 储引擎),通过MyISAM引擎实现了高速读的数据库,此外还有其他的核心存储引擎与第三方引擎。

MySQL的文档丰富,有很多质量不错的免费参考手册、图书与在线文档,还有来自于Oracle和第三方厂商的培训与支持。

Oracle支持MySQL的多个版本:Standard、Enterprise、Classic、Cluster、Embedded与Community。其中有些是免费下载的,另外一些则是收费的。其核心代码基于GPL许可,对于那些不想使用GPL许可的开发者与厂商来说还有商业许可可供使用。

现在,基于最初的MySQL代码还有更多的数据库可供选择,因为几个核心的MySQL开发者已经发布了MySQL分支。最初的MySQL创建者之一开发了他自己的MySQL分支MariaDB,它是免费的,基于GPL许可。知名的MySQL开发者Brian Aker所创建的分支Drizzle对其进行了大量的改写,特别针对多CPU、云、网络应用与高并发进行了优化。

PostgreSQL

PostgreSQL是社区驱动的开源项目。它提供了单个完整功能的版本,而不像MySQL那样提供了 多个不同的社区版、商业版与企业版。PostgreSQL基于自由的BSD/MIT许可,组织可以使用、复制、修改和重新分发代码,只需要提供一个版权声明即可。

可靠性是PostgreSQL的最高优先级。它以坚如磐石的品质和良好的工程化而闻名,支持高事务、任务关键型应用。PostgreSQL的文档非常精良,提供了大量免费的在线手册,还针对旧版本提供了归档的参考手册。

数据一致性与完整性也是PostgreSQL的高优先级特性。PostgreSQL是完全支持ACID特性的,它对于数据库访问提供了强大的安全性保证,充分利用了企业安全工具,如Kerberos与OpenSSL等。你可以定义自己的检查,根据自己的业务规则确保数据质量。

在众多的管理特性 中,point-in-time recovery(PITR)是非常棒的特性,这是个灵活的高可用特性,提供了诸如针对失败恢复创建热备份以及快照与恢复的能力。但这并不是 PostgreSQL的全部,项目还提供了几个方法来管理PostgreSQL以实现高可用、负载均衡与复制等,这样你就可以使用适合自己特定需求的功能了。

区别

类别 Mysql PostgreSQL
数据类型 支持的数据类型有限,且text字段有不同的限制 能支持多种复杂的字段,包括array,json,xml,地理位置,且文本类型不会有大小限制,自带全文搜索
索引 B+树索引 支持函数索引、条件索引、树索引、表达式索引、部分索引、哈希索引等
DDL DDL会锁表 DDL可以跟普通SQL一样放在事务中,能够实时在线执行,不会锁表
稳定性 一般
读写性能 读性能强 大量写性能好,复杂查询性能好
标准SQL支持 能力有限 支持更全的SQL
引擎 多种内置引擎,innoDB,MySAM,内存引擎等,还可以自定义。只有innoDB支持事务和ACID 只有一种内置引擎,不可自定义,支持ACID
数据一致性 数据校验不强,将数据合法性验证交给客户. 比如时间类型可写入:2012-2-30,结果是0000-00-00 校验更强,在合法性方面做得比较严格. 时间类型写入2012-2-30会报错
数据库技术 MySQL 是一个纯粹的关系数据库管理系统 PostgreSQL 是一个对象关系数据库管理系统
视图、存储过程、触发器 支持简单视图;可以为SQL INSERTUPDATE 和 DELETE 语句使用 AFTER 和 BEFORE 触发器 支持高级视图;pg还支持PostgreSQL 支持 INSTEAD OF 触发
开发者的角度 MySQL是应用开发者创建出来的DBMS; MySQL倾向于使用者的角度,回答的问题是 “你想解决的是什么问题” PostgreSQL是由数据库开发者创建出来的DBMS ;倾向于理论角度,回答的问题是 “数据库应该如何来解决问题”

如何做出选择

这两个关系数据库都适用于大多数使用案例。但是,在做出最终决定之前,您可能要考虑以下因素。

应用范围

PostgreSQL 更适合具有频繁写入操作和复杂查询的企业级应用程序。

但是,如果想创建原型,创建用户较少的内部应用程序,或者创建具有更多读取次数和较少数据更新的信息存储引擎,则您可以启动 MySQL 项目。

数据库开发经验

MySQL 更适合初学者,其学习曲线更短。从头开始构建新的数据库项目所需的时间更少。将 MySQL 设置为独立产品,或将其与其他 Web 开发技术(如 LAMP 堆栈)捆绑在一起很简单。

另一方面,PostgreSQL 对于新手来说可能更具挑战性。它通常需要复杂的基础设置设置和问题排查经验。

性能要求

如果您的应用程序需要频繁更新数据,则 PostgreSQL 是更好的选择。但是,如果您需要频繁读取数据,则首选 MySQL。

写入性能

MySQL 使用写锁定来实现真正的并发性。例如,如果一个用户正在编辑表,则另一个用户可能必须等到操作完成后才能更改该表。

但是,PostgreSQL 内置了多版本并发控制(MVCC)支持,没有读写锁定。这样,如果要进行频繁并发的写入操作,则 PostgreSQL 数据库的表现会更好。

读取性能

PostgreSQL 会创建一个新的系统进程,为每个连接到数据库的用户分配大量内存(大约 10MB)。它需要内存密集型资源才能针对多个用户进行扩展。

另一方面,MySQL 为多个用户使用单一进程。因此,对于主要向用户读取和显示数据的应用程序,MySQL 数据库的表现优于 PostgreSQL。

参考

[1]PostgreSQL 与 MySQL 相比,优势何在?

[2]PostgreSQL与MySQL的比较

[3]MySQL 和 PostgreSQL 有何区别?

4]PostgreSQL与MySQL之间的区别?


文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
  目录