前言
之前就听说pg功能强大,而且使用排名也比较高,正好要接入pg管控运维,需要快速学习,下面是pg与mysql和Oracle的简单对比,可以在大的层面上有所了解
pg与mysql对比
MySQL | pg |
---|---|
SQL语法支持弱(不支持sequence,子查询性能弱) | 主流夺标查询能力强(Nest loop, hash join, sort merge join), sql语法能力强(with语句), 正则表达式能力强,where支持正则表达函数,存储过程支持的好(可用perl Python编写) |
性能数据少 (这个确实,性能采集需要专门监控来做) | 性能工具强(大量性能试图,看到正在执行的sql,锁视图等),有专门的架构和进程用于性能收集 |
online DDL支持的不好 | 加空列只是加表定义,瞬间的事,在线索引不锁表 |
异步复制/半同步复制 | 9.1开始支持同步复制 |
支持复杂SQL,支持大量分析函数,空间索引,支持插件 |
- 使用推荐
- 简单存储功能,操作简单,大部分逻辑在应用中完成 推荐用 mysql或者nosql
- 不想消耗太多开发资源,数据库完美与代码融合 推荐用pg,写数据库就跟写Python似的
pg与Oracle对比
- 共同点
- 都是用共享内存进程结构
- 连接都是一个进程为此连接服务,跟mysql的线程池差别较大
- WAL日志和Oracle的redo类似都是记录物理块数据的变化,与mysql的binlog差别较大
- pg功能略弱与Oracle(不支持索引组织表等)
- pg支持的类型多,比如: 网络地址类型,XML, JSON, UUID, 数组,正则表达式函数where中可用正则,可用perl/Python等写存储过程 更小巧
参考: postgresql 修炼之道