postgre与mysql区别

Posted ppjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgre与mysql区别相关的知识,希望对你有一定的参考价值。

SQL兼容性

PostgreSQL 9.5
  兼容 SQL:2011 子集
  http://www.postgresql.org/docs/9.5/static/features-sql-standard.html

mysql 5.7
  兼容 SQL:1999 子集

功能差异 - 高级SQL

递归查询, connect by, 树形查询  
  PostgreSQL 通过(with 或 tablefunc支持)支持,MySQL 不支持
    例子
    https://yq.aliyun.com/articles/240
    http://www.postgresql.org/docs/9.5/static/tablefunc.html 
窗口查询, window over 
  PostgreSQL 支持,MySQL 不支持
    例子
    http://blog.163.com/[email protected]/blog/static/16387704020137154137930
    http://blog.163.com/[email protected]/blog/static/16387704020121024102312302/
    http://blog.163.com/[email protected]/blog/static/16387704020124239390354/
    http://www.postgresql.org/docs/9.5/static/functions-window.html 
rollup, grouping sets, cube
  PostgreSQL 支持,MySQL 不支持
    例子
    http://www.postgresql.org/docs/9.5/static/queries-table-expressions.html#QUERIES-GROUPING-SETS 
    http://blog.163.com/[email protected]/blog/static/16387704020154269591874/ 
高级聚合(json,数组,相关性,标准差(采样,全局),截距,斜率,方差(采样,全局),mode,percentile_cont,distc,rank,dense_rank,percent_rank,cume_dist,grouping)
  PostgreSQL 支持,MySQL 不支持
    例子 
    http://www.postgresql.org/docs/9.5/static/functions-aggregate.html 
    http://blog.163.com/[email protected]/blog/static/1638770402015224124337/ 
    http://blog.163.com/[email protected]/blog/static/1638770402015379286873/ 
    http://blog.163.com/[email protected]/blog/static/16387704020153713222764 

hash join
  PostgreSQL 支持,MySQL 不支持
merge join
  PostgreSQL 支持,MySQL 不支持
nestloop join
  都支持
    例子
    http://www.postgresql.org/docs/9.5/static/xoper-optimization.html
    http://www.postgresql.org/docs/9.5/static/planner-optimizer.html 
哈希聚合
  PostgreSQL 支持, MySQL 不支持
    例子
    http://www.postgresql.org/docs/9.5/static/runtime-config-query.html#RUNTIME-CONFIG-QUERY-ENABLE 
事务间共享事务快照
  PostgreSQL 支持,MySQL 不支持
    例子
    http://www.postgresql.org/docs/9.5/static/functions-admin.html#FUNCTIONS-SNAPSHOT-SYNCHRONIZATION
    http://www.postgresql.org/docs/9.5/static/sql-set-transaction.html
    http://www.postgresql.org/docs/9.5/static/app-pgdump.html
    http://blog.163.com/[email protected]/blog/static/163877040201326829943/
    http://blog.163.com/[email protected]/blog/static/163877040201241134721101/ 

功能差异 - 约束

foreign key
  PostgreSQL 支持, MySQL 仅 innodb 引擎支持FK
    例子
    http://www.postgresql.org/docs/9.5/static/ddl-constraints.html 
for no key update, for key share 粒度锁
  PostgreSQL 支持, MySQL 不支持
  例子
    http://www.postgresql.org/docs/9.5/static/explicit-locking.html#LOCKING-ROWS
    http://blog.163.com/[email protected]/blog/static/16387704020130249109133/
    http://blog.163.com/[email protected]/blog/static/16387704020130305109687/ 
check 约束
  PostgreSQL 支持, MySQL不支持(仅支持语法,实际不生效,不严谨)
    例子
    http://www.postgresql.org/docs/9.5/static/ddl-constraints.html 
exclusion 约束
  PostgreSQL 支持, MySQL不支持
    例子
    http://www.postgresql.org/docs/9.5/static/ddl-constraints.html 

功能差异 - 易用性

表空间
  都支持
alter 列值转表达式(alter table alter column c1 type newtype using (expression(...)) )
  PostgreSQL 支持, MySQL 不支持
    例子
    http://www.postgresql.org/docs/9.5/static/sql-altertable.html 
    https://yq.aliyun.com/articles/30470 
alter table 需要重组表的操作
  MySQL ( innodb ) 
    optimize table, 添加列,删除列, 重排, 修改row_format, key_block_size, mark column null, not null, 修改字段长度, 修改字段数据类型, 添加主键, 删除主键, 转换字符集, 指定字符集, rebuild table
    http://dev.mysql.com/doc/refman/5.7/en/innodb-create-index-overview.html 
  PostgreSQL
    vacuum full, cluster, 修改字段数据类型, (修改长度不需要重组表)
    http://www.postgresql.org/docs/9.5/static/sql-altertable.html
分区表
  都支持
  PostgreSQL 通过继承支持分区表, 阿里RDS PostgreSQL支持分区表语法  
    例子
    http://www.postgresql.org/docs/9.5/static/ddl-partitioning.html
    https://yq.aliyun.com/articles/113 

物化视图
  PostgreSQL 支持, MySQL 暂不支持
    例子
    http://www.postgresql.org/docs/9.5/static/sql-creatematerializedview.html 
物化视图增量刷新
  PostgreSQL 支持, MySQL 暂不支持
    例子
    http://www.postgresql.org/docs/9.5/static/sql-refreshmaterializedview.html 
表继承关系
  PostgreSQL 支持, MySQL 暂不支持
    例子
    http://www.postgresql.org/docs/9.5/static/tutorial-inheritance.html 
使用 like 建结构类似的表
  PostgreSQL 支持, MySQL 暂不支持
    例子
    http://www.postgresql.org/docs/9.5/static/sql-createtable.html 

功能差异 - 开发功能

客户端开发语言支持
  C, java, python, ...
函数
  void, 单行,SRF,事件触发器(MySQL 不支持),触发器
    例子
    http://blog.163.com/[email protected]/blog/static/16387704020132131361949/ 
    http://www.postgresql.org/docs/9.5/static/event-triggers.html 
2PC
  PostgreSQL 支持, MySQL 仅innodb支持
服务端绑定变量
  PostgreSQL 支持, MySQL 不支持
    例子
    http://www.postgresql.org/docs/9.5/static/sql-prepare.html
savepoint
  PostgreSQL 支持, MySQL 仅innodb支持

异步消息
  PostgreSQL 支持, MySQL 不支持
    例子
    http://www.postgresql.org/docs/9.5/static/sql-notify.html 
    http://www.postgresql.org/docs/9.5/static/sql-listen.html
游标
  都支持
数组FOR循环,query FOR循环,游标FOR循环
  PostgreSQL 全支持
    例子
    http://www.postgresql.org/docs/9.5/static/plpgsql-control-structures.html
    http://www.postgresql.org/docs/9.5/static/plpgsql-cursors.html 
  MySQL 不支持数组

功能差异 - 类型支持

数据类型
  PostgreSQL 
    高精度numeric, 浮点, 自增序列,货币,字节流,时间,日期,时间戳,布尔,枚举,平面几何,立体几何,多维几何,地球,PostGIS,网络,比特流,全文检索,UUID,XML,JSON,数组,复合类型,域类型,范围,树类型,化学类型,基因序列,FDW, 大对象
  MySQL
    数字,时间,字符串,简单的GIS,JSON
支持索引的数据类型
  PostgreSQL 
    高精度numeric, 浮点, 自增序列,货币,字节流,时间,日期,时间戳,布尔,枚举,平面几何,立体几何,多维几何,地球,PostGIS,网络,比特流,全文检索,UUID,XML,JSON,数组,复合类型,域类型,范围,树类型,化学,基因序列
  MySQL 
    数字,字符串,比特流,时间,全文检索,GIS

功能差异 - 索引支持

索引方法
  PostgreSQL 支持 btree, hash, gist, sp-gist, gin, brin 索引
  MySQL 支持 btree, gis类型索引
规则表达式匹配,支持索引检索
  PostgreSQL 支持
  MySQL 不支持
数组支持索引
  PostgreSQL 支持,MySQL不支持数组
全文检索支持索引
  都支持
索引扩展功能
  PostgreSQL 支持 表达式索引,部分索引,联合索引
  MySQL 支持 联合索引
自定义索引方法
  PostgreSQL支持
  MySQL 不支持

功能差异 - 并发能力

隔离级别
  PostgreSQL 支持 RC, RR, 以及高于SQL 92标准的串行隔离级别
  MySQL 支持 RU,RC,RR,以及SQL 92标准的串行隔离级别
slave库支持RR隔离级别查询
  都支持
锁粒度
  PostgreSQL 支持 行锁,对象锁,页锁,预锁,应用锁,自旋锁,共享锁,排它锁
  MySQL 不支持 应用锁,预锁
死锁检测
  都支持
skip locked, nowait
  PostgreSQL 都支持
  MySQL 不支持, 阿里云RDS MySQL 支持nowait

功能差异 - 多引擎和外部源支持

多引擎支持
  PostgreSQL
    内置heap, 通过插件实现内存表, 列存储, 压缩存储, 流式存储, 非关系存储等。
  MySQL
    MyISAM, innodb, ...
外部表
  PostgreSQL支持任意外部数据源, (例如jdbc, file, odbc, oracle, mysql, db2, redis, mongo, ES, hadoop......)
  MySQL 仅支持csv文件外部表
dblink
  PostgreSQL 支持, MySQL 暂不支持
内存表
  都支持, (PostgreSQL 通过外部表支持)
ES 引擎
  PostgreSQL 支持
  MySQL 不支持

功能差异 - 安全

数据加密
  PostgreSQL 支持加密数据类型,可选GPG加密算法 
  MySQL 需要通过其他手段达到目的
认证方法
  PostgreSQL 支持 密码、LDAP、AD、GSSAPI、SSPI、Ident、Peer、RADIUS、PAM、签名认证
  MySQL 支持 密码 认证
数据传输加密
  都支持
行安全策略
  PostgreSQL 支持, MySQL 暂不支持
数据库内部支持libselinux接口, (美国国家安全局制定的安全加强标准) 
  PostgreSQL 支持, MySQL 暂不支持

功能差异 - 优化器

http://www.postgresql.org/docs/9.5/static/runtime-config-query.html
GPU 并行计算支持
  PostgreSQL 支持, MySQL 不支持
遗传优化器算法
  PostgreSQL 支持CBO、CRO、遗传算法
  MySQL 支持CBO、CRO
HINT PLAN
  都支持
CPU 并行计算
  PostgreSQL 9.6支持(线性性能提升)
  MySQL 不支持
自定义成本因子
  PostgreSQL 支持
  MySQL 不支持

功能差异 - 可用性和可靠性

多master
  都支持
逻辑复制
  都支持
物理复制
  PostgreSQL 支持, MySQL 不支持
级联复制
  都支持
同步复制
  都支持
pasox,设置保护级别
  PostgreSQL 9.6 支持
  MySQL 不支持
主备延迟
  PostgreSQL 不受事务大小限制, 几乎没有延迟(ms以内)
  MySQL延迟和事务大小相关, 长事务会导致巨大主备延迟
在线备份, 增量备份
  都支持
基于REDO的数据库回滚,修复主备时间线错乱
  PostgreSQL 支持, MySQL不支持
任意时间点恢复(事务粒度)
  都支持, MySQL 需要用户自己写程序来支持

功能差异 - 编程扩展能力

是否支持采样查询
  PostgreSQL 支持, MySQL不支持
是否支持扩展采样算法
  PostgreSQL 支持, MySQL不支持
自定义数据类型
  PostgreSQL 支持, MySQL 不支持
自定义索引方法
  PostgreSQL 支持, MySQL 不支持
字符集自动转换, C扩展接口
  PostgreSQL 支持, MySQL 不支持
自定义聚合
  PostgreSQL 支持, MySQL 不支持
自定义窗口
  PostgreSQL 支持, MySQL 不支持

功能差异 - 管理特性

JOB 支持
  都支持
支持数据缓存快照和预热
  PostgreSQL 支持, MySQL不支持
支持数据文件块级别fadvise flag设置
  PostgreSQL 支持, MySQL不支持
性能诊断方法
  PostgreSQL
    explain (analyze, verbose, costs, timing, buffers)
    IO Time
    profile
    probe
    auto_explain
  MySQL
    explain
角色权限继承
  PostgreSQL 支持, MySQL 暂不支持

性能差异

TPC-H(OLAP), 复杂查询 PostgreSQL 优势非常明显
  PostgreSQL 9.6 支持CPU并行
  PostgreSQL 支持GPU插件加速
  PostgreSQL rewrite能力更强
  PostgreSQL 支持hash join, hash agg, merge join
  PostgreSQL btree,hash,gin,gist,sp-gist,brin索引方法
TPC-C(OLTP)  
  请自行测试
TPC-B
  请自行测试

秒杀,模糊查询,地理位置信息查询,范围查询,实时流式计算,批量入库等场景 PostgreSQL 优势非常明显

以下无法给出客观意见,请自行测试,或者下载源码欣赏。

  稳定性
  可靠性
  代码成熟度

平台兼容性

  都很棒

服务端编程语言

函数(过程)语言
  PostgreSQL
    plpgsql, sql, c, c++, java, javascript, R, python, perl, php, tcl, ruby, lua, julia, ...
  MySQL
    sql, 不支持其他扩展编程语言

扩展能力

类型扩展,操作符扩展,函数扩展,索引方法扩展,索引扩展, 
  PostgreSQL 支持, MySQL不支持
C触发器函数, C事件触发器函数
  PostgreSQL 支持, MySQL不支持
函数语言扩展
  PostgreSQL 支持扩展函数支持接口, erlang, .... 
  MySQL 不支持
机器学习库
  PostgreSQL 支持, MySQL 不支持
流式计算
  PostgreSQL 支持, MySQL 不支持

scale up 能力

PostgreSQL 
  资源管控能力强。
  单实例可以充分发挥HPC的性能,有多少资源就能使用多少资源。
  支持GPU并行计算
  支持CPU并行计算
MySQL
  请自行测试

scale out 能力

都支持sharding
PostgreSQL
  pg_shard, oneproxy, plproxy, pg-xc, pg-xl, PostgreSQL 9.6 FDW based shard

# 应用场景
PostgreSQL
  几乎适合任何场景
MySQL
  适合相对较简单的应用场景

社区状态

PostgreSQL
  单一开源分支,社区力量较集中。全球有1000名以上的内核研发人员。
  社区研发由核心组员和committer组成,持续5年以上对社区版本有贡献内核研发人员超过50位。
  社区核心人员分别来自数据库厂商,数据库支持和服务公司,数据库最终用户的公司,形成了一个非常好的力量均衡。
MySQL
  分支非常多, 引擎非常多。

社区活跃度

PostgreSQL
    非常活跃
MySQL
    非常活跃

生态

DBA
  PostgreSQL,国内供不应求
内核研发
  PostgreSQL,国内超过100名内核研发,依旧供不应求
应用开发
  PostgreSQL,SQL兼容性强,开发人员通用
  MySQL,SQL兼容性较弱,企业应用开发人员难接受
客户端驱动
  PostgreSQL,兼容性强
  MySQL,兼容性强
开发框架
  PostgreSQL,兼容性非常好,有一些非常特殊的开发框架(如IOT,化学,医疗,基因库,GIS...)
  MySQL,兼容性好
服务端编程语言
  PostgreSQL,扩展能力极强,支持各种服务端编程语言
  MySQL,不支持扩展

软件开发商数量,不相上下
软件厂商覆盖面 ,不相上下
培训公司
  PostgreSQL,国内较少,国外较多
软件外包公司
技术支持公司
  PostgreSQL ,国内较少,国外较多
数据库厂商
  PostgreSQL,国内外都非常多(BSD许可的原因)
  MySQL,非常少
用户量
  PostgreSQL,国内企业用户偏多,互联网行业偏少,国外都较多
用户覆盖面,
  PostgreSQL,覆盖几乎各个行业的核心系统
  MySQL,互联网较多,企业周边系统较多
高校
  PostgreSQL,教育资源丰富

应用案例

PostgreSQL
  生物制药 {Affymetrix(基因芯片), 美国化学协会, gene(结构生物学应用案例), …}
  电子商务 { CD BABY,  etsy(与淘宝类似), whitepages, flightstats, Endpoint Corporation, 阿里巴巴 …}
  学校 {加州大学伯克利分校, 哈佛大学互联网与社会中心, .LRN, 莫斯科国立大学, 悉尼大学, 武汉大学, 人民大学, 上海交大, 华东师范 …}
  金融 {Journyx, LLC, trusecommerce(类似支付宝), 日本证券交易交所, 邮储银行, 同花顺, 平安银行…}
  游戏 {MobyGames, 斯凯网络 …}
  政府 {美国国家气象局, 印度国家物理实验室, 联合国儿童基金, 美国疾病控制和预防中心, 美国国务院, 俄罗斯杜马, 国家电网, 12306…}
  医疗 {calorieking, 开源电子病历项目, shannon医学中心, …}
  制造业 {Exoteric Networks, 丰田, 捷豹路虎}
  媒体 {IMDB.com, 美国华盛顿邮报国会投票数据库, MacWorld, 绿色和平组织, …}
  开源项目 {Bricolage, Debian, FreshPorts, FLPR, PostGIS, SourceForge, OpenACS, Gforge, …}
  零售 {ADP, CTC, Safeway, Tsutaya, Rockport, …}
  科技 {Sony, MySpace, Yahoo, Afilias, APPLE, 富士通, Omniti, Red Hat, Sirius IT, SUN, 国际空间站, Instagram, Disqus, 去哪儿, 腾讯, 华为, 中兴, 云游, 智联招聘, 高德地图 …}
  通信 {Cisco, Juniper, NTT(日本电信), 德国电信, Optus, Skype, Tlestra(澳洲电讯), 中国移动…}
  物流 {SF}

目前国内较大规模应用PG的企业
  平安科技、邮储银行、高德、去哪儿、腾讯、阿里、华为、斯凯、通策医疗、云游、探探科技
  国家电网、XX铁路、xx保险、XX运营商、XXOA办公、同花顺、中航

发展潜力

PostgreSQL
  SQL兼容性强,功能强大,稳定性好,性能优越,扩展能力强,社区活跃,几乎覆盖全世界所有行业。
  国外生态已形成,国内正逐渐成为数据库焦点,伴随IOT和工业4.0的发展,redis+mongo+postgresql+仓储分析系统,能覆盖几乎所有应用场景的需求,发展潜力巨大。

学习成本

PostgreSQL
  文档完备脉络清晰,代码注释完备,认真学习非常容易达到较高的水平。
  PostgreSQL功能非常强大,与Oracle旗鼓相当,初期学习成本会较高,但是学成之后,会有一种与之融为一体的感觉,使用起来得心应手。可以大大降低使用成本,管理成本和风险。

开发成本

PostgreSQL
  SQL兼容性好,功能强大,扩展能力强,服务端编程能力强。
  数据库端可以解决非常多的程序需求,不需要move data,开发成本低。

开源许可

PostgreSQL
  BSD许可,允许任意形式分发和使用
MySQL
  GPL许可,商用软件分发必须开源

本文转自:https://yq.aliyun.com/ask/19599?spm=a2c4e.11155435.0.0.49f26596BoyotH


以上是关于postgre与mysql区别的主要内容,如果未能解决你的问题,请参考以下文章

Postgres DISTINCT 与 DISTINCT ON 有啥区别?

具有运行时 pojos 的带有 Hibernate 的 OSGi 片段包

MySQL的REGEXP 和 like 在匹配上的区别

这两个代码片段有啥区别?

NodeJS/Sequelize/MySQL - 为啥需要 postgres 依赖项?

这两个代码片段之间有区别吗?如果有,那又如何? [复制]