PostgreSQL与MySQL数据库对比
MySQL的缺点:
1、功能不够强大:MySQL的多表连接查询方式只支持“Nest loop”,不支持“hash
join”和“sort merge join”。不仅如此,还有很多SQL语法它也不支持,子查询性能比较
低。由于它不支持sequence,有公司还为此专门开发了统一序号分发中心的软件。
2、性能优化工具和度量信息不足:MySQL在运行过程中如果出现问题,只产生很少的
性能数据,很难让维护人员准确定位问题产生的原因。MySQL的复制是异步的,无
法通过Master/Slave做到数据零丢失(MySQL 5.7的组复制可以实现数据零丢失)。
一些第三方公司也改造MySQL源代码实现同步复制,但这些方案要么是没有开源,
要么已开源却不是很稳定,所以对于普通大众来说,如何实现同步复制成了一个令人
头疼的问题。
3、在线操作功能较弱:如果在MySQL表中加列,基本上是新建一个表,而且建索引时
也会锁定整张表,即在建索引过程中,表不能做任何操作。一些大的互联网公司或者
修改MySQL源码来实现在线DDL的功能,或者是通过上层架构来解决这个问题,如先
在slave数据库上把DDL做完,然后把应用从master库切换到slave,再把原先的
master上把DDL做完。第一种方法,需要公司有很强的MySQL研发能力,第二种方法
需要公司有较强的开发能力,能设计出较强的应用架构。这对于一些中小型公司来说
不太容易实现。
相对于MySQL的弱点,PostgreSQL优点:
1、PostgreSQL功能强大:支持所有主流的多表连接查询的方式(如:“Nest
Loop”、“hash join”、“sort merge join”等);支持绝大多数的SQL语法(如:with字
句)。PostgreSQL对正则表达式强大的支持、内置函数也非常丰富。字段类型还支持
数组类型。除了可以使用PL/PGSQL写存储过程外,还可以使用各种主流开发语言的
语法(如:Python语言的PL/Python、Perl语言的PL/Perl来写存储过程)。这些强大
的功能可以大大地节约开发资源。很多开发人员在PostgreSQL上做开发时,会发现数
据库已帮自己实现了很多功能,甚至有一些业务功能都可以直接使用数据库的功能解
决,不再需要写代码来实现。
2、性能优化工具与度量信息丰富:PostgreSQL数据库中有大量的性能视图,可以方便
地定位问题(比如:可看到正在执行的SQL,可通过锁视图看到谁在等待、哪条记录
被锁定等)。PostgreSQL中设计了专门的架构和进程用于收集性能数据,即有物理
I/O方面的统计,也有表扫描及索引扫描方面的性能数据。
3、在线操作功能好:PostgreSQL增加空值的列时,本质上只是在系统表上把列定义
上,无须对物理结构做更新,这就让PostgreSQL在加列时可以做到瞬间完成。
PostgreSQL还支持在线建索引的功能,建索引的过程可以不锁更新操作。
4、从PostgreSQL9.1开始,支持同步复制宫,通过master和slave之间的复制可以实现零
数据丢失的高可用方案。
另外,由于MySQL对SQL语法支持的功能较弱,基本上不适合做数据仓库。而PostgreSQL不仅支持复杂的SQL,还支持大量的分析函数,非常适合做数据仓库。




