评价:MySQL和PostgreSQL的优劣较量

这篇文章中,我们选用MySQL 4.0.2-alpha与PostgreSQL 7.2进行比较,因为MySQL 4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利。

  我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会日益提供。而随着硬件性能的飞速提高,速度也不再是什么太大的问题。

  

  一、两者的共同优势

  这两个产品都属于开放源码的一员,性能和功能都在高速地提高和增强。MySQL AB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。

  

  二、两者不同的背景

  MySQL的背后是一个成熟的商业公司,而PostgreSQL的背后是一个庞大的志愿开发组。这使得MySQL的开发过程更为慎重,而PostgreSQL的反应更为迅速。

  这样的两种背景直接导致了各自固有的优点和缺点。

  

  三、MySQL的主要优点

  1、首先是速度,MySQL通常要比PostgreSQL快得多。MySQL自已也宣称速度是他们追求的主要目标之一,基于这个原因,MySQL在以前的文档中也曾经说过并不准备支持事务和触发器。但是在最新的文档中,我们看到MySQL 4.0.2-alpha已经开始支持事务,而且在MySQL的TODO中,对触发器、约束这样的注定会降低速度的功能也列入了日程。但是,我们仍然有理由相信,MySQL将有可能一直保持速度的优势。

  2、MySQL比PostgreSQL更流行,流行对于一个商业软件来说,也是一个很重要的指标,流行意味着更多的用户,意味着经受了更多的考验,意味着更好的商业支持、意味着更多、更完善的文档资料。

  3、与PostgreSQL相比,MySQL更适宜在Windows环境下运行。MySQL作为一个本地的Windows应用程序运行(在NT/Win2000/WinXP下,是一个服务),而PostgreSQL是运行在Cygwin模拟环境下。PostgreSQL在Windows下运行没有MySQL稳定,应该是可以想象的。

  4、MySQL使用了线程,而PostgreSQL使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。

  5、MySQL可以适应24/7运行。在绝大多数情况下,你不需要为MySQL运行任何清除程序。PostgreSQL目前仍不完全适应24/7运行,这是因为你必须每隔一段时间运行一次VACUUM。

  6、MySQL在权限系统上比PostgreSQL某些方面更为完善。PostgreSQL只支持对于每一个用户在一个数据库上或一个数据表上的INSERT、SELECT和UPDATE/DELETE的授权,而MySQL允许你定义一整套的不同的数据级、表级和列级的权限。对于列级的权限,PostgreSQL可以通过建立视图,并确定视图的权限来弥补。MySQL还允许你指定基于主机的权限,这对于目前的PostgreSQL是无法实现的,但是在很多时候,这是有用的。

  7、由于MySQL 4.0.2-alpha开始支持事务的概念,因此事务对于MySQL不再仅仅成为劣势。相反,因为MySQL保留无事务的表类型。这就为用户提供了更多的选择。

  8、MySQL的MERGE表提供了一个独特管理多个表的方法。

  9、MySQL的myisampack可以对只读表进行压缩,此后仍然可以直接访问该表中的行。

  

  四、PostgreSQL的主要优点:

  1、对事务的支持与MySQL相比,经历了更为彻底的测试。对于一个严肃的商业应用来说,事务的支持是不可或缺的。

  2、MySQL对于无事务的MyISAM表。采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新。而PostgreSQL不存在这样的问题。

  3、PostgreSQL支持存储过程,而目前MySQL不支持,对于一个严肃的商业应用来说,作为数据库本身,有众多的商业逻辑的存在,此时使用存储过程可以在较少地增加数据库服务器的负担的前提下,对这样的商业逻辑进行封装,并可以利用数据库服务器本身的内在机制对存储过程的执行进行优化。此外存储过程的存在也避免了在网络上大量的原始的SQL语句的传输,这样的优势是显而易见的。

  4、对视图的支持,视图的存在同样可以最大限度地利用数据库服务器内在的优化机制。而且对于视图权限的合理使用,事实上可以提供行级别的权限,这是MySQL的权限系统所无法实现的。

  5、对触发器的支持,触发器的存在不可避免的会影响数据库运行的效率,但是与此同时,触发器的存在也有利于对商业逻辑的封装,可以减少应用程序中对同一商业逻辑的重复控制。合理地使用触发器也有利于保证数据的完整性。

  6、对约束的支持。约束的作用更多地表现在对数据完整性的保证上,合理地使用约束,也可以减少编程的工作量。

  7、对子查询的支持。虽然在很多情况下在SQL语句中使用子查询效率低下,而且绝大多数情况下可以使用带条件的多表连接来替代子查询,但是子查询的存在在很多时候仍然不可避免。而且使用子查询的SQL语句与使用带条件的多表连接相比具有更高的程序可读性。

  8、支持R-trees这样可扩展的索引类型,可以更方便地处理一些特殊数据。

  9、PostgreSQL可以更方便地使用UDF(用户定义函数)进行扩展。

  

  五、那么我究竟应该使用MySQL还是PostgreSQL

  这个问题很难说得清,而且事实上除了MySQL和PostgreSQL外,使用Oracle、Sybase、Informix等也是明智的选择。如何你确定只在MySQL和PostgreSQL中进行选择,以下规则总是有效的。

  1、如果你的操作系统是Windows,你应该使用MySQL。

  2、如果你对数据库并不了十分了解,甚至不知道事务、存储过程等究竟是什么,你应该使用MySQL。

  3、如果你的应用对数据的完整性和严肃性要求不高,但是追求处理的高速度。例如是一个论坛和社区,你应该使用MySQL。

  4、你的应用是一个严肃的商业应用,对数据完整性要求很高。而且你希望对一些商业数据逻辑进行很好的封装,例如是一个网上银行,你应该使用PostgreSQL。

  5、你的应用处理的是地理数据,由于R-TREES的存在,你应该使用PostgreSQL。

  6、你是一个数据库内核的狂热爱好者,你甚至希望拥有你自己版本的数据库,毫无疑问,你必须使用PostgreSQL,没准下一个PostgreSQL版本中某一个模块的作者就是你。

  

后记

  以上只是作者从自己的理解尽量客观公正地评价MySQL和PostgreSQL的优劣。其中的带有倾向性的意见只代表作者个人观点,有关这两个数据库,欢迎广大朋友提出自己的看法。

时间: 2024-12-10 15:35:11

评价:MySQL和PostgreSQL的优劣较量的相关文章

MySQL和PostgreSQL两数据库的对决

在这篇文章中,我们选用MySQL 4.0.2-alpha与PostgreSQL 7.2进行比较,因为MySQL 4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利.我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切.对于一个成熟的数据库,稳定性肯定会日益提供.而随着硬件性能的飞速提高,速度也不再是什么太大的问题. 一.前言 前一段时间,我曾经翻译过一篇 将你的网站从MySQL改为PostgreSQL ,其实

MySQL与PostgreSQL比较哪个数据库更好?

  如果打算为项目选择一款免费.开源的数据库,那么你可能会在MySQL与PostgreSQL之间犹豫不定.MySQL与PostgreSQL都是免费.开源.强大.且功能丰富的数据库.你主要的问题可能是:哪一个才是最好的开源数据库,MySQL还是PostgreSQL呢?该选择哪一个开源数据库呢? 在选择数据库时,你所做的是个长期的决策,因为后面如果再改变决定将是非常困难且代价高昂的.你希望一开始就选择正确.两个流行的开源数据库MySQL与PostgreSQL常常成为最后要选择的产品.对这两个开源数据

USE SysBench test Mysql and PostgreSQL - 1

上一篇介绍了编译sysbench支持mysql和postgresql. 本文将简单的介绍一下sysbench测试mysql和postgresql. 首先初始化数据 :  MySQL : [root@db-172-16-3-33 bin]# ./sysbench --test=oltp --oltp-table-size=10000000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=root

MySQL与PostgreSQL:该选择哪个开源数据库?哪一个更好?

Naresh Kumar是一位软件工程师与热情的博主,对编程与新事物充满了激情和兴趣.近日,Naresh撰写了一篇博文,对开源世界最常见的两种数据库MySQL与PostgreSQL的特点进行了详尽的分析和比对. 如果打算为项目选择一款免费.开源的数据库,那么你可能会在MySQL与PostgreSQL之间犹豫不定.MySQL与PostgreSQL都是免费.开源.强大.且功能丰富的数据库.你主要的问题可能是:哪一个才是最好的开源数据库,MySQL还是PostgreSQL呢?该选择哪一个开源数据库呢?

USE SysBench test Mysql and PostgreSQL - 2

 上一篇BLOG介绍了使用sysbench测试mysql和postgresql的simple场景. 也就是只有select的场景,  http://blog.163.com/digoal@126/blog/static/163877040201341441042613/ 本文将介绍包含复杂查询的场景, 包含如下SQL : INSERT INTO sbtest(k,c,pad) values(?,?,?) SELECT c from sbtest where id=$1 UPDATE sbtest

在MySQL和PostgreSQL之外,为什么阿里要研发HybridDB数据库?

2016-12-09 来源:InfoQ 作者:萧少聪 阿里云为什么要做HybridDB?Pivotal么看待阿里云此举?Pivotal中国研发中心总经理冯雷(Ray Feng).阿里云数据库总负责人余锋(褚霸)于12月13日线上发布会剖析自己的想法.点击回顾视频:除了发布外,我们还想告诉你--阿里云为什么要做HybridDB? 编者按 在大数据火遍IT界之前,大家对数据信息的挖掘通常聚焦在BI(Business Intelligence)之上.BI具有着明确的分析需求,清晰地知道需要处理哪些信息

针对MySQL和PostgreSQL两数据库对比

PostgreSQL 在这篇文章中,我们选用MySQL 4.0.2-alpha与PostgreSQL 7.2进行比较,因为MySQL 4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利. 我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切.对于一个成熟的数据库,稳定性肯定会日益提供.而随着硬件性能的飞速提高,速度也不再是什么太大的问题. 二.两者的共同优势 这两个产品都属于开放源码的一员,性能和功能都在高速

MySQL?PostgreSQL?又开撕了...

导读 PostgreSQL又开撕MySQL了,我到底该选择站在哪边? 到底我该选哪个 PostgreSQL宣称是:The world's most advanced open source database MySQL则宣称是:The world's most popular open source database 而我的观点是 选择最合适的,而不是"最好"的! 那么,什么才是最合适的呢,我想有几点: 哪个数据库的使用量够大,从业者够多.人多力量大,有问题也能更早.更容易发现,更容易

Install SysBench support MySQL and PostgreSQL

[测试环境] CentOS 5.7 x64 [安装MySQL] 1. 下载Mysql Red Hat & Oracle Linux 5 (x86, 64-bit), RPM Package MySQL Server 5.6.11 84.2M Download (MySQL-server-5.6.11-2.rhel5.x86_64.rpm) MD5: 944e3e425becf3ef7ad5f191e0e1f04f 2. 安装Mysql rpm -ivh MySQL-server-5.6.11-2