mysql和postgreSQL的区别

ops/2024/9/25 0:14:43/

mysql

1、mysql多表连接查询方式支支持nest loop,不支持hash join和sort merge join。pg支持多种连接查询方式。

2、mysql子查询性能比pg低。

3、mysql的复制是异步的,即无法通过主从架构做到数据零丢失。一些第三方公司也有改造mysql源代码实现同步复制,但是不是很稳定。mysql的同步复制让人很头痛。

注:mysql5.7后支持全同步复制,主节点执行完一个事务,所有的从节点执行了该事务才会返回客户端。因为需要等待所有的从库执行完该事务才能返回,所以全同步复制性能会收到很严重的影响。在主库上提交事务之后,所有的从库节点必须收到、apply并且提交这些事务,然后主库线程才能继续做后续操作,即缺点是主库完成一个事务的时间会被拉长,性能降低。

4、在线操作功能较弱:mysql创建索引会锁住整个表。即再建索引的过程中,表不能做任何操作。pg建索引不会锁住整个表。

解决方法1:

一些大的互联网公司修改mysql源码来实现在线DDL的功能。

解决方法2:

在主从架构中,创建索引一般在从(slave)中先创建索引,之后把从库切换为主库(主从切换),之后再原先的master现在的slave数据库上把DDL做完。

5、在线操作功能较弱:mysql表中加列,基本就是新建一个表。相当于物理上新建了个表,即物理操作。

6、mysql对sql语法支持的功能较弱,基本上不适合做数据仓库。虽然也有厂商开发了基于mysql的数据仓库存储引擎,但是这个方案知识解决了部分数据仓库的问题,sql功能弱的问题仍没有完全解决。该存储引擎的社区版还有很多限制,如:不支持数据更新,不支持太多的并发执行(最多支持十几个)等。而pg不仅支持复杂的sql还支持大量的分析函数,非常适合做数据仓库。clickhouse也适合做数据仓库。

pg

1、pg支持多种表连接方式。支持大多数的sql语法(如with子句,mysql也支持with)。

2、pg字段类型支持数据类型。

3、可以使用pl/PGSQL写存储过程(mysql也可以写存储过程),但是pg还可以使用各种主流开发语言的语法写存储过程。

4、上面的这些有点可以大大的节约开发资源。很多开发人员再pg上做开发时候,发现数据库已经帮自己实现了很多功能,甚至一些业务功能都可以直接使用数据库的功能解决,不再需要写代码来实现了。

5、性能优化工具丰富:pg中有大量的性能视图,可以方便的定位问题(如:可以看到正在执行的sql。可以通过锁示图看到谁在等待、那条记录被锁定等)

6、在线操作功能好:pg增加空值的列时本质上知识再系统表上把列定义上,无需对物理结构做更新,这就让pg在加列时可以做到瞬时完成。即物理操作(系统表)+逻辑操作

7、pg还支持在线建索引的功能,建索引的过程可以不锁更新操作。

8、pg支持同步复制功能,可以通过master和slave之间的复制实现零数据丢失的高可用方案。

总结

如果仅仅把数据库作为一个简单的存储功能使用(如一些大型互联网公司),一些复杂的功能都想放在应用中来实现,那么选择mysql很合适。如果应用的数据访问简单(如大多数的blog系统)那么后端使用mysql也很合适。

如果应用不简单,又不想消耗太多的开发资源,pg合适。使用python+postgresql架构,几十人就可以支持整个公司的业务。在数据库中使用pg,就像在开发语言中使用python,会让工作变得简洁高效。


http://www.ppmy.cn/ops/48879.html

相关文章

Spring-boot-logback-spring.xml文件Appender标签下的属性

在logback-spring.xml文件中,标签是通过set方法设置的值,例如下面的代码,属性hrName的值为TYC,当服务启动的时候,控制台会一直打印TYC三个字母 首先,我们自定义一个Appender,然后里面有一个属性…

wordpress主题开发

科普一:wordpress 是一套用 php 这个语言写的CMS后台管理系统,即我们大家的 wordpress 网站后台是一样的,能体现我们网站外观不同的地方就在于wordpress主题(即皮肤),而这个主题的基本构成是 htmlcssjavasc…

小程序中的事件处理

事件处理 一个应用仅仅只有界面展示是不够的,还需要和用户做交互,例如:响应用户的点击、获取用户输入的值等等,在小程序里边,我们就通过编写 JS 脚本文件来处理用户的操作 1. 事件绑定和事件对象 小程序中绑定事件与…

AI数字人的开源解决方案

目前,国内外已经涌现出一些优秀的数字人开源解决方案,这些解决方案为开发者提供了构建数字人应用的工具和基础设施。以下是一些比较知名的数字人开源解决方案。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1…

Web前端网页设计模板:创新设计与高效开发的完美融合

Web前端网页设计模板:创新设计与高效开发的完美融合 在当今数字化时代,Web前端网页设计模板已经成为构建美观且功能强大的网页应用的重要工具。它不仅能够简化开发过程,提升工作效率,还能够确保网页在各种设备上都能够呈现出令人…

使用R语言生成CDISC SDTM.AE domain

写在前面 - 使用的是Rstudio - 其实R已经有生成sdtm相关的package,以下代码仅作为练习R语言的语法,不是高效生成sdtm的方法 - 代码中没有解决的问题包括:EPOCH相关的逻辑没有考虑partial date的情况;在使用arrange() function做…

运维监控系统

做监控系统集成,持续更新ing 1.Prometheus k8s安装prometheusdocker部署prometheusthanos实现prometheus高可用部署 2.Grafana docker安装grafanagrafana的admin密码忘记了grafana使用mysql远程存储 3.Alertmanager 4.Consul 5.夜莺系统 6.时序数据库 6.1 …

C++文件操作

简述&#xff1a; C文件操作也就是对文件流的操作&#xff0c;因而需要先引入包含文件流的头文件&#xff1a;<fstream> 然后C该头文件提供了三种文件流&#xff0c;分别是fstream&#xff08;文件流&#xff09;、ifstream&#xff08;输入文件流&#xff09;、ofstre…