网络上很多关于这两者之间的对比,分析的都很透彻,也很全面了。但是我想提醒大家的是,要看清楚这类对比文章的发布时间,因为技术在不断进步,原来MYSQL中没有的特性,现在渐渐的完善了,可以说,从特性上来讲,两者之间的差别已经越来越小。Postgresql目前更新到9.2,MYSQL也到了6.2,诸如视图,子查询,触发器,数据完整性约束,具体的语法如:
CASE
WHEN THEN
ELSE
END AS
等等原来MYSQL没有的特性,现在都有了,所以如果我们对比的时候还拿这些来说事,就未免显得太不够专业了。我们要对比的是一些不会的东西,这些特点才会让你决定到底援用哪个数据库。
1.Posgresql是进程模式,多进程,单线程,类似的还有Oracle。而MYSQL采用的是线程模式,单进程,多线程,对此,大家在运行数据库的时候可以查看任务管理器,SQL Server也是如此。
众所周知,多进程,进程模式,利用CPU时间片轮转,可以利用更充分CPU,因此光拿多核单台机器上来说,他明显在支持高并发性能方面更胜一筹。而线程模式呢,开一个线程显然要比开一个进程所耗费的资源要少,另外在不同线程之间的环境转换和访问公用的存储区域,显然比在不同进程之间要快,所以它的处理速度要快,对资源的消耗较少,但是当高并发时,性能不佳。
2.存储引擎。Posgresql只有一个存储引擎,且综合性能良好。而MYSQL支持不同表使用不同的存储引擎。如MYISAM,InnoDB(Oracle所有),memory。在mysql中配置有许多不同的存储引擎,用户可以灵活的选择适用于服务器、数据库和表格的存储引擎,以便获得最大的性能和最大的灵活性。这也是mysql不同于其他大型数据库以及mysql为何如此受欢迎的主要因素。借鉴说明一下MYSQL中重要的3个存储引擎的特点:
每种存储引擎都有各自的优势,不能笼统的说谁的性能更好,只有合适不合适。
(1)MyISAM存储引擎:主要用于管理非事物表,它提供了高速的存储与检索,以及全文搜索能力。该存储引擎插入数据快,但是空间和内存的使用效率较低。如果表主要适用于插入新纪录和读出记录,那么选择MyISAM存储引擎可以实现处理的高效率,不支持事物的提交和回滚,查询时会把整个表锁定,但是速度快
(2)InnoDB存储引擎:它主要用于事务处理应用程序,支持外键,同时还支持奔溃修复能力和并发控制。如果对事物的完整性要求比较高,要求实现并发通知,那么选择InnoDB存储引擎比较有优势。如果需要频繁的进行更新、删除操作,也可以选择该存储引擎,因为该存储引擎可以实现事物的提交和回滚。(所以事物就是对实时性要求比较高)
(3)Memory存储引擎:Memory存储引擎提供“内存中”表,该存储引擎的所有数据都存储在内存中,数据的处理速度很快但是安全性不高。
3.对于MYSQL来说,它目前使用更为普遍,所以它的商业支持和应有要好于Posgresql,这一点如果要商业应用也是不可以忽视的。