oracle Mysql PostgreSQL 数据库的对比

Mysql的多表连接查询只支持 Nest Loop,不支持 hash join sort merge join,子查询性能较低,不支持 sequence
Mysql在执行过程中出现问题只产生很少的性能数据,难准确定位问题产生的原因
Mysql的复制是异步的,无法通过 Master/Slave做到数据零丢失
mysql在线操作功能弱,即在Mysql表中加列,基本上是新建一个表,而且建索引时会锁定整张表,即在建索引的过程中,不能对表进行操作,可以通过修改Mysql源码来实现在线 DDL的功能,或者是用过上层架构来解决这个问题,如先在 slave数据库上把DDL做完,然后把应用从master库切换到slave,再把原先的 master上把DDL做完
Mysql对于sql语法支持较弱,基本上不适合做数据仓库,一些厂商开发了基于Mysql的数据仓库存储引擎(如 Infobright),但这个方案只是解决了部分数据仓库的问题,sql功能弱的问题仍无法完全解决
Infobright的社区版本功能上还有很多限制,如不支持数据更新,不支持太多并发执行(最多支持十几个)

PostgreSQL支持复杂的sql,还支持大量的分析函数,适合做数据仓库
PostgreSQL支持所有主流的多表连接查询方式(如 Nest loop/hash join/sort merge join等),支持绝大多数的SQL语法(如with子句)

PostgreSQL对正则表达式支持很好,内置函数很丰富,字段类型支持数组类型。

PostgreSQL除了可以使用PL/PGSSQL写存储过程外,还可以使用各种主流开发语言的语法(如python的PL/Python、Perl的PL/Perl来写存储过程)

PostgreSQL性能优化工具和度量信息丰富:PostgreSQL有大量性能视图,可以方便定位问题

PostgreSQL在线操作功能好,PostgreSQL增加空值的列时,本质上只是在系统表上把列定义上,无须对物理结构做更新,这可以使得加列在瞬间完成

PostgreSQL还支持在线建立索引的功能,建索引的过程可以不锁更新操作
PostgreSQL还支持同步复制功能,通过master和slave之间的复制可以实现零数据丢失的高可用方案
PostgreSQL支持空间索引

PostgreSQL比Oracle在功能上稍弱,pg不支持索引组织表

pg和oracle都使用共享内存的进程结构,客户端和数据库服务器建立一个连接后,数据库服务器就启动一个进程为这个连接服务,这 和mysql的线程模型不同

pg的WAL日志和oracle的redo日志都是记录物理块数据变化的,这和mysql的binlog也不同

pg支持网络地址类型,XML类型,JSON类型,UUID类型以及数组类型,有强大的正则表达式函数,where条件中可以使用正则表达式匹配,可以使用python或Perl等语言写存储过程
pg比oracle更小巧


你可能感兴趣的:(oracle Mysql PostgreSQL 数据库的对比)