pgsql和mysql的对比和特性

目前找到的资料和说法如下 后续还会继续补充

1. pgsql 的特点

主要是 多线程的使用同时 提供提供了丰富的类型支持 json,varchar, 等,索引的类型也是有很多包括 b-tree,map,hash,gist这些索引 ,同时 处理的数据量也能保证数据量的读写,PostgreSQL支持物化视图

Pg 的列里有隐藏的乐观锁 version 字段, 默认的 repeatable read 级别就能保证并发更新的正确性,

GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型

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

PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持

作者:方圆
链接:https://www.zhihu.com/question/20010554/answer/15863274
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
PG不止支持传统数据类型:numeric、strings、date、decimal等,还支持非结构的数据类型:json、xml、hstore等以及网络数据类型、bit字符串,还有ARRAYS,地理数据类型。

2. mysql的特点

主要的对内存的使用比较好 同时包含两个数据库引擎 inodb,MyISAM,目前主要是使用Inodeb来保证数据库的事务和读写问题,同时 MyISAM是有其他功能,主要提供的类型是字符串 ,索引的类型主要是 b-tree,到达百万后数据的瓶颈明显

MySQL 的事务隔离级别 repeatable read 并不能阻止常见的并发更新,

preview

preview

进程模式与线程模式的对比PostgreSQL和oracle是进程模式,MySQL是线程模式。进程模式对多CPU利用率比较高。进程模式共享数据需要用到共享内存,而线程模式数据本身就是在进程空间内都是共享的,不同线程访问只需要控制好线程之间的同步。线程模式对资源消耗比较少。所以MySQL能支持远比oracle多的更多的连接。对于PostgreSQL的来说,如果不使用连接池软件,也存在这个问题,但PostgreSQL中有优秀的连接池软件软件,如pgbouncer和pgpool,所以通过连接池也可以支持很多的连接。

作者:蛙课网
链接:https://www.zhihu.com/question/20010554/answer/743955463
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


堆表与索引组织表的的对比Oracle支持堆表,也支持索引组织表PostgreSQL只支持堆表,不支持索引组织表Innodb只支持索引组织表索引组织表的优势:表内的数据就是按索引的方式组织,数据是有序的,如果数据都是按主键来访问,那么访问数据比较快。而堆表,按主键访问数据时,是需要先按主键索引找到数据的物理位置。索引组织表的劣势:索引组织表中上再加其它的索引时,其它的索引记录的数据位置不再是物理位置,而是主键值,所以对于索引组织表来说,主键的值不能太大,否则占用的空间比较大。对于索引组织表来说,如果每次在中间插入数据,可能会导致索引分裂,索引分裂会大大降低插入的性能。所以对于使用innodb来说,我们一般最好让主键是一个无意义的序列,这样插入每次都发生在最后,以避免这个问题。由于索引组织表是按一个索引树,一般它访问数据块必须按数据块之间的关系进行访问,而不是按物理块的访问数据的,所以当做全表扫描时要比堆表慢很多,这可能在OLTP中不明显,但在数据仓库的应用中可能是一个问题。

作者:蛙课网
链接:https://www.zhihu.com/question/20010554/answer/743955463
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。