postgreSQL与MySQL的比较

(1)区别

  1. mysql的各种text字段有不同的限制,需要手动区分small text,middle text, large text
    pg没有该限制,可以支持text的各种大小
  2. 按照SQL标准,null判断只能用is null,不能用 ==null
    pg可以设置transform_null_equals 把 = null 翻译成 is null 避免踩坑
  3. MySQL 的事务隔离级别 repeatable read 并不能阻止常见的并发更新, 得加锁才可以, 但悲观锁会影响性能, 手动实现乐观锁又复杂. 而 Pg 的列里有隐藏的乐观锁 version 字段, 默认的 repeatable read 级别就能保证并发更新的正确性, 并且又有乐观锁的性能. 附带一个各数据库对隔离级别的行为差异比较调查
  4. MySQL 不支持多个表从同一个序列中取 id, 而 Pg 可以.
  5. MySQL 不支持 OVER 子句, 而 Pg 支持. OVER 子句能简单的解决 “每组取 top 5” 的这类问题.几乎任何数据库的子查询 (subquery) 性能都比 MySQL 好.
  6. pg它可以存储 array 和 json, 可以在 array 和 json 上建索引, 甚至还能用表达式索引. 为了实现文档数据库的功能, 设计了 jsonb 的存储结构. 有人会说为什么不用 Mongodb 的 BSON 呢? Pg 的开发团队曾经考虑过, 但是他们看到 BSON 把 [“a”, “b”, “c”] 存成 {0: “a”, 1: “b”, 2: “c”} 的时候就决定要重新做一个 jsonb 了… 现在 jsonb 的性能已经优于 BSON.

(2)pg优势

1.pg性能优于mysql(有人说三条街,哈哈哈)相同的数据量计算,pg时间一般只有mysql的四分之一左右(具体情况可能有所不同)
2.pg对json支持比较好,还有fdw功能,可以吧别的数据库的表当自己的用
3.任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。
4.PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。
5.PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
6.PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持,腾讯内部数据存储主要是MYSQL,但是数据分析主要是HADOOP+PGSQL(听李元佳说过,但是没有验证过)。
7.PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。
8.一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。

(3)缺点

第一,MySQL有一些实用的运维支持,如 slow-query.log ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了
第二,mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分
第三,MySQL的复制可以用多级从库,但是在9.2之前,PGSQL不能用从库带从库。第四点,从测试结果上看,mysql 5.5的性能提升很大,单机性能强于pgsql,5.6应该会强更多.第五点,对于web应用来说,mysql 5.6 的内置MC API功能很好用,PGSQL差一些。


总之就是:pg集成了关系型数据库与非关系型数据库的优点,让你可以灵活的村塾数据结构。

总结自知乎答案:https://www.zhihu.com/question/20010554

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PostgreSQLMySQL都提供了丰富的函数库,但它们的函数有一些不同之处。 1. 数据类型支持 PostgreSQL支持更多的数据类型,包括数组、范围和网络地址类型等,这意味着PostgreSQL的函数库可以更好地处理这些数据类型。MySQL则更专注于处理常见的数据类型,例如整数和字符串。 2. 存储过程 PostgreSQL支持存储过程,这是一种在数据库内部执行的编程代码块。存储过程可以接受参数,执行复杂的逻辑和流程控制,并返回结果。MySQL也支持存储过程,但PostgreSQL在这方面更加强大和灵活。 3. 触发器 PostgreSQL支持复杂的触发器,这些触发器可以在表格上执行的操作之前或之后执行自定义操作。MySQL也支持触发器,但它的功能比PostgreSQL要简单。 4. 全文搜索 PostgreSQL提供了全文搜索功能,这是一种快速和高效的搜索方法,可用于处理大量文本数据。MySQL也提供了全文搜索功能,但PostgreSQL的实现更加高级和灵活。 5. JSON支持 PostgreSQL支持原生的JSON数据类型,这意味着可以直接存储和查询JSON数据。MySQL也支持JSON,但需要使用第三方库来处理JSON数据。 总的来说,PostgreSQLMySQL都提供了强大的函数库和丰富的功能,但PostgreSQL在处理复杂数据类型、存储过程和触发器等方面更加强大和灵活。而MySQL则更专注于处理常见的数据类型和提供简单易用的功能。选择哪个数据库取决于你的具体需求和偏好。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值