首页数据库pgsql数据库 postgresql和mysql的区别

pgsql数据库 postgresql和mysql的区别

编程之家2023-10-2096次浏览

大家好,今天小编来为大家解答pgsql数据库这个问题,postgresql和mysql的区别很多人还不知道,现在让我们一起来看看吧!

pgsql数据库 postgresql和mysql的区别

mysql和postgresql的区别

二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。

三、PG多年来在 GIS领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。

四、PG的“无锁定”特性非常突出,甚至包括 vacuum这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。

五、PG的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。

六、PG有极其强悍的 SQL编程能力(9.x图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持,腾讯内部数据存储主要是MYSQL,但是数据分析主要是HADOOP+PGSQL(听李元佳说过,但是没有验证过)。

七、PG的有多种集群架构可以选择,plproxy可以支持语句级的镜像或分片,slony可以进行字段级的同步设置,standby可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。

pgsql数据库 postgresql和mysql的区别

八、一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT类型的功能受限,只能作为外部大数据访问。而 PG的 TEXT类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。

九,对于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。

十,pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)

最后说一下我感觉 PG不如 MySQL的地方。

第一,MySQL有一些实用的运维支持,如 slow-query.log,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。

第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,

pgsql数据库 postgresql和mysql的区别

第三点,MySQL的复制可以用多级从库,但是在9.2之前,PGSQL不能用从库带从库。

第四点,从测试结果上看,mysql 5.5的性能提升很大,单机性能强于pgsql,5.6应该会强更多.

第五点,对于web应用来说,mysql 5.6的内置MC API功能很好用,PGSQL差一些。

另外一些:

pgsql和mysql都是背后有商业公司,而且都不是一个公司。大部分开发者,都是拿工资的。

说mysql的执行速度比pgsql快很多是不对的,速度接近,而且很多时候取决于你的配置。

对于存储过程,函数,视图之类的功能,现在两个数据库都可以支持了。

另外多线程架构和多进程架构之间没有绝对的好坏,oracle在unix上是多进程架构,在windows上是多线程架构。

很多pg应用也是24/7的应用,比如skype.最近几个版本VACUUM基本不影响PGSQL运行,8.0之后的PGSQL不需要cygwin就可以在windows上运行。

至于说对于事务的支持,mysql和pgsql都没有问题。

postgresql和mysql的区别

特性 MySQL PostgreSQL

实例通过执行 MySQL命令(mysqld)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个 mysqld实例。一个实例管理器可以监视 mysqld的各个实例。

通过执行 Postmaster进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用 initdb创建第一个数据库。一台机器上可以启动多个实例。

数据库数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个 MySQL实例中的所有数据库共享同一个系统编目。数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享 pg_databases。

数据缓冲区通过 innodb_buffer_pool_size配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的 80%。 Shared_buffers缓存。在默认情况下分配 64个缓冲区。默认的块大小是 8K。可以通过设置 postgresql.conf文件中的 shared_buffers参数来更新缓冲区缓存。

数据库连接客户机使用 CONNECT或 USE语句连接数据库,这时要指定数据库名,还可以指定用户 id和密码。使用角色管理数据库中的用户和用户组。客户机使用 connect语句连接数据库,这时要指定数据库名,还可以指定用户 id和密码。使用角色管理数据库中的用户和用户组。

身份验证 MySQL在数据库级管理身份验证。基本只支持密码认证。 PostgreSQL支持丰富的认证方法:信任认证、口令认证、Kerberos认证、基于 Ident的认证、LDAP认证、PAM认证

加密可以在表级指定密码来对数据进行加密。还可以使用 AES_ENCRYPT和 AES_DECRYPT函数对列数据进行加密和解密。可以通过 SSL连接实现网络加密。可以使用 pgcrypto库中的函数对列进行加密/解密。可以通过 SSL连接实现网络加密。

审计可以对 querylog执行 grep。可以在表上使用 PL/pgSQL触发器来进行审计。

查询解释使用 EXPLAIN命令查看查询的解释计划。使用 EXPLAIN命令查看查询的解释计划。

备份、恢复和日志 InnoDB使用写前(write-ahead)日志记录。支持在线和离线完全备份以及崩溃和事务恢复。需要第三方软件才能支持热备份。在数据目录的一个子目录中维护写前日志。支持在线和离线完全备份以及崩溃、时间点和事务恢复。可以支持热备份。

JDBC驱动程序可以从参考资料下载 JDBC驱动程序。可以从参考资料下载 JDBC驱动程序。

表类型取决于存储引擎。例如,NDB存储引擎支持分区表,内存引擎支持内存表。支持临时表、常规表以及范围和列表类型的分区表。不支持哈希分区表。由于PostgreSQL的表分区是通过表继承和规则系统完成了,所以可以实现更复杂的分区方式。

索引类型取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。支持 B-树、哈希、R-树和 Gist索引。

约束支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。支持主键、外键、惟一、非空和检查约束。

存储过程和用户定义函数支持 CREATE PROCEDURE和 CREATE FUNCTION语句。存储过程可以用 SQL和 C++编写。用户定义函数可以用 SQL、C和 C++编写。没有单独的存储过程,都是通过函数实现的。用户定义函数可以用 PL/pgSQL(专用的过程语言)、PL/Tcl、PL/Perl、PL/Python、SQL和 C编写。

触发器支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。支持行前触发器、行后触发器和语句触发器,触发器过程用 C编写。

系统配置文件 my.conf Postgresql.conf

数据库配置 my.conf Postgresql.conf

客户机连接文件 my.conf pg_hba.conf

XML支持有限的 XML支持。有限的 XML支持。

数据访问和管理服务器 OPTIMIZE TABLE——回收未使用的空间并消除数据文件的碎片

myisamchk-analyze——更新查询优化器所使用的统计数据(MyISAM存储引擎)

mysql——命令行工具

MySQL Administrator——客户机 GUI工具 Vacuum——回收未使用的空间

Analyze——更新查询优化器所使用的统计数据

psql——命令行工具

pgAdmin——客户机 GUI工具

并发控制支持表级和行级锁。InnoDB存储引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL语句在事务级设置隔离级别。支持表级和行级锁。支持的 ANSI隔离级别是 Read Committed(默认——能看到查询启动时数据库的快照)和 Serialization(与 Repeatable Read相似——只能看到在事务启动之前提交的结果)。使用 SET TRANSACTION语句在事务级设置隔离级别。使用 SET SESSION在会话级进行设置。

MySQL相对于PostgreSQL的劣势:

MySQL

PostgreSQL

最重要的引擎InnoDB很早就由Oracle公司控制。目前整个MySQL数据库都由Oracle控制。

BSD协议,没有被大公司垄断。

对复杂查询的处理较弱,查询优化器不够成熟

很强大的查询优化器,支持很复杂的查询处理。

只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-merge join)与散列连接(hash join)。

都支持

pgsql与mysql有什么区别

pgsql与mysql的区别有:在pgsql上的功能实现比mysql严谨,对表的连接支持更加完整;pgsql的优化器功能完整,支持索引类型多,而mysql的优化器比较简单,适用于简单的查询操作

PostgreSQL相对于MySQL的优势

1、在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨;

2、存储过程的功能支持要比MySQL好,具备本地缓存执行计划的能力;

3、对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强;

4、PG主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。

5、PG的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。

6、MySQL的存储引擎插件化机制,存在锁机制复杂影响并发的问题,而PG不存在。

MySQL相对于PostgreSQL的优势

1、innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制,是占优的。新老数据一起存放,需要定时触发VACUUM,会带来多余的IO和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀;

2、MySQL采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束;

3、MySQL的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作;

4、MySQL分区表的实现要优于PG的基于继承表的分区实现,主要体现在分区个数达到上千上万后的处理性能差异较大。

5、MySQL的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了innodb适合事务处理场景外,myisam适合静态数据的查询场景。

总的来说,开源数据库都不是很完善,商业数据库oracle在架构和功能方面都还是完善很多的。从应用场景来说,PG更加适合严格的企业应用场景(比如金融、电信、ERP、CRM),而MySQL更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景(比如google、facebook、alibaba)。

OK,关于pgsql数据库和postgresql和mysql的区别的内容到此结束了,希望对大家有所帮助。

云服务器代理(选择云服务器代理要注意什么)com是什么域名?com域名是什么意思