PostgreSQL与MySQL相比,优势何在?
PostgreSQL类似于Oracle的多进程框架,可以支持高并发的应用场景。
如果把OracleDBA转到PostgreSQL数据库上是比较容易的,毕竟PostgreSQL数据库与Oracle数据库很相似。
PostgreSQL几乎支持所有的SQL标准,支持类型相当丰富。PostgreSQL数据库的源代码要比MySQL数据库的源代码更容易读懂,如果团队的C语言能力比较强的话,就可以在PostgreSQL数据库上做开发,比方说实现类似greenplum的系统,这样也能与现在的分布式趋势接轨。
为了说明PostgreSQL的功能,下面从“从Oracle迁移到Mysql之前必须知道的50件事”简要对比一下PostgreSQL数据库与MySQL数据库之间的差异。
从Oracle迁移到Mysql会面对的50件难事
1、对子查询的优化表现不佳。(PostgreSQL可解决)
2、对复杂查询的处理较弱。(PostgreSQL可解决)
3、查询优化器不够成熟。(PostgreSQL可解决)
PostgreSQL完全支持SQL-92标准,对SQL的支持也很全面,可以支持复杂的SQL查询。
4、性能优化工具与度量信息不足。(PostgreSQL可解决)
PostgreSQL提供了执行计划和详细的cost值,可以方便看到SQL的执行效率。
5、审计功能相对较弱。
6、安全功能不成熟,没有用户组与角色的概念,没有回收权限的功能(仅可以授予权限)。当一个用户从不同的主机/网络以同样的用户名/密码登录之后,可能被当作完全不同的用户来处理,没有类似于Oracle的内置的加密功能。
7、身份验证功能是完全内置的,不支持LDAP、ActiveDirectory或其它类似的外部身份验证功能。
8、MysqlCluster可能与你想象的有较大差异。
9、存储过程与触发器的功能有限。(PostgreSQL可解决)
PostgreSQL提供了完善的存储过程和触发器支持。
10、垂直扩展性较弱。
11、不支持MPP(大规模并行处理)。(PostgreSQL可解决)
PostgreSQL是类似Oracle数据库的多进程架构,而不像MySQL是多线程的架构,所以能支持MPP。
12、支持SMP(对称多处理器),但是如果每个处理器超过4或8个核(core)时,Mysql的扩展性表现较差。
13、对于时间、日期、间隔等时间类型没有秒以下级别的存储类型。
14、可用来编写存储过程、触发器、计划事件以及存储函数的语言功能较弱。
15、没有基于回滚(roll-back)的恢复功能,只有前滚(roll-forward)的恢复功能。
16、不支持快照功能。
17、不支持数据库链(databaselink)。有一种叫做Federated的存储引擎可以作为一个中转将查询语句传递到远程服务器的一个表上,不过,它功能很粗糙并且漏洞很多。
18、数据完整性检查非常薄弱,即使是基本的完整性约束,也往往不能执行。(PostgreSQL可解决)
PostgreSQL提供完善的数据完整性检查机制,支持外键。
19、优化查询语句执行计划的优化器提示非常少。
20、只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-mergejoin)与散列连接(hashjoin)。(PostgreSQL可解决)
PostgreSQL则支持这些表连接类型。
21、大部分查询只能使用表上的单一索引;在某些情况下,会存在使用多个索引的查询,但是查询优化器通常会低估其成本,它们常常比表扫描还要慢。(PostgreSQL可解决)
PostgreSQL数据不存在这个问题,假设表T的两个字段col1的col2上有两个索引,idx_1和idx_2,那么select*fromtwherecol1=:aandcol2=:b;查询时,PostgreSQL数据库有可能把这个查询转化为select*fromtwherecol1=:aintersectselect*fromtwherecol2=:b,这样两个索引都可以使用上。
22、不支持位图索引(bitmapindex)。每种存储引擎都支持不同类型的索引。大部分存储引擎都支持B-Tree索引。
23、管理工具较少,功能也不够成熟。
24、没有成熟能够令人满意的IDE工具与调试程序。可能不得不在文本编辑器中编写存储过程,并且通过往表(调试日志表)中插入记录的方式来做调试。
25、每个表都可以使用一种不同的存储引擎。(PostgreSQL可解决)
26、每个存储引擎在行为表现、特性以及功能上都可能有很大差异。(PostgreSQL可解决)
27、大部分存储引擎都不支持外键。(PostgreSQL可解决)
28、默认的存储引擎(MyISAM)不支持事务,并且很容易损坏。(PostgreSQL可解决)
29、最先进最流行的存储引擎InnoDB由Oracle拥有。(PostgreSQL可解决)
30、有些执行计划只支持特定的存储引擎。特定类型的Count查询,在这种存储引擎中执行很快,在另外一种存储引擎中可能会很慢。(PostgreSQL可解决)
PostgreSQL只有一种存储引擎,所以不存在上面的情况。而PostgreSQL支持完善的事务。
31、执行计划并不是全局共享的,,仅仅在连接内部是共享的。
32、全文搜索功能有限,只适用于非事务性存储引擎。Ditto用于地理信息系统/空间类型和查询。(PostgreSQL可解决)
PostgreSQL数据库支持全文搜索,支持更多类型的索引,如B-tree,R-tree,Hash,GiST,GIN,R-tree,GIST,GIN索引可用于空间类型和查询。
33、没有资源控制。一个完全未经授权的用户可以毫不费力地耗尽服务器的所有内存并使其崩溃,或者可以耗尽所有CPU资源。
34、没有集成商业智能(businessintelligence),OLAP**数据集等软件包。
35、没有与GridControl类似的工具
36、没有类似于RAC的功能。如果你问”如何使用Mysql来构造RAC”,只能说你问错了问题。
37、不支持用户自定义类型或域(domain)。(PostgreSQL可解决)
PostgreSQL支持丰富的类型,同时也支持自定义类型。
38、每个查询支持的连接的数量最大为61。
39、MySQL支持的SQL语法(ANSISQL标准)的很小一部分。不支持递归查询、通用表表达式(Oracle的with语句)或者窗口函数(分析函数)。支持部分类似于Merge或者类似特性的SQL语法扩展,不过相对于Oracle来讲功能非常简单。(PostgreSQL可解决)
这些PostgreSQL数据库都支持,如窗口函数。
40、不支持功能列(基于计算或者表达式的列,Oracle11g开始支持计算列,以及早期版本就支持虚列(rownum,rowid))。
41、不支持函数索引,只能创建基于具体列的索引。(PostgreSQL可解决)
PostgreSQL支持函数索引。
42、不支持物化视图。
43、不同的存储引擎之间,统计信息差别很大,并且所有的存储引擎支持的统计信息都只支持简单的基数(cardinality)与一定范围内的记录数(rows-in-a-range)。换句话说,数据分布统计信息是有限的。更新统计信息的机制也不多。
44、没有内置的负载均衡与故障切换机制。
45、复制(Replication)功能是异步的,并且有很大的局限性。例如,它是单线程的(single-threaded),因此一个处理能力更强的Slave的恢复速度也很难跟上处理能力相对较慢的Master。
46、Cluster并不如想象的那么完美。或许我已经提过这一点,但是这一点值得再说一遍。
47、数据字典(INFORMATION_SCHEMA)功能很有限,并且访问速度很慢(在繁忙的系统上还很容易发生崩溃)。
48、不支持在线的AlterTable操作。
49、不支持Sequence。(PostgreSQL可解决)
PostgreSQL支持sequence。
50、类似于ALTERTABLE或CREATETABLE一类的操作都是非事务性的。它们会提交未提交的事务,并且不能回滚也不能做灾难恢复。Schame被保存在文件系统上,这一点与它使用的存储引擎无关。(PostgreSQL可解决)
PostgreSQL不存在这个问题。
每种数据库都有不同的应用场景
PostgreSQL具备了更高的可靠性,对数据一致性、完整性的支持高于MySQL,因此PostgreSQL更加适合严格的企业应用场景,MySQL查询速度较快,更适合业务逻辑相对简单、数据可靠性要求较低的互联网场景。以上个人浅见,欢迎批评指正。
认同我的看法,请点个赞再走,感谢!
喜欢我的,请关注我,再次感谢!
postgresql是什么何谓postgresql
1、PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。2、POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查...
Postgresql数据库如何新建登录用户
1、首先打开Postgresql的管理工具pgAdmin4,接着双击服务器名称,如下图所示 2、在弹出的Connect to Server界面中输入postgres用户的密码,然后点击OK按钮,如下图所示 3、进入到数据库以后右键单击登录\/组角色选项,选择Create下面的Login\/Group Role选项,如下图所示 4、接下来会弹出创建登录用户的界面,...
Windows系统中有哪些方法开启Postgresql服务
1、首先按Win+R组合键打开运行窗口,在输入框中输入services.msc命令,如下图所示 2、在出现的服务界面中我们找到postgresql的记录行,如下图所示,右键单击选择启动 3、当服务的状态显示为正在运行的时候则代表postgresql服务已经打开了,如下图所示 4、按住键盘上的Ctrl+Shift+ESC组合键,注意是同时按下...
PostgreSQL与MySQL相比,优势何在?
PostgreSQL数据库的源代码要比MySQL数据库的源代码更容易读懂,如果团队的C语言能力比较强的话,就可以在PostgreSQL数据库上做开发,比方说实现类似greenplum的系统,这样也能与现在的分布式趋势接轨。 为了说明PostgreSQL的功能,下面从“从Oracle迁移到Mysql之前必须知道的50件事”简要对比一下PostgreSQL数据库与MySQL数据库之间...
PostgreSQL 与 MySQL 相比,优势何在?
当比较 PostgreSQL 与 MySQL,我们不难发现 PostgreSQL 在众多领域展现出显著的优势。首先,让我们来看看 PostgreSQL 如何超越 MySQL 的局限:1. 数据类型灵活性MySQL 对 text 字段的处理存在复杂性,区分 small text、middle text 和 large text 等不同规格。相反,PostgreSQL 的 text 类型能够适应各种...
MySQL与PostgreSQL相比哪个更好
PostgreSQL的稳定性极强,Innodb等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多MySQL用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。PostgreSQL大概可以算是个皮卡。比MYSQL强一些。尤其使用起来,不像MYSQL有那么多坑。但问题是...
三分钟!彻底搞懂PostgreSQL 和 MySQL 区别之分
PostgreSQL,也称为 Postgres,是一种开源关系数据库,因其可靠性、灵活性和对开放技术标准的支持而享有盛誉。PostgreSQL 支持非关系和关系数据类型。它被称为当今可用的最兼容、最稳定和最成熟的关系数据库之一,并且可以轻松处理复杂的查询。PostgreSQL 的特性包括:PostgreSQL 这是一个“一刀切”的解决方案...
postgresql 和postgis区别是什么?
PostgreSQL 同众多数据库产品一样,采用客户端-服务器构架。客户端向服务器发出请求并得到响应。这种机制同浏览器从网络服务器获取网页类似。在 PostgreSQL 中,请求以 SQL 语言发出,而响应多为从数据库提取的表单。 客户端与服务器可以部署在同一台设备上,即 PostgreSQL 可以在单一的计算机上使用。借由系统内部的 ‘loo...
pgpeg指什么意思
pgpeg是指基于PostgreSQL的地理空间扩展。以下是详细解释:一、pgpeg的基本概念 pgpeg是一个用于处理地理空间数据的扩展插件,它是基于流行的开源数据库PostgreSQL构建的。这个扩展为PostgreSQL增加了对地理空间数据的支持,使得数据库能够存储、查询和管理诸如点、线、多边形等地理空间数据。这对于地理信息系统...
为啥postgresql 号称最高级的开源数据库
从技术角度来讲,PostgreSQL 采用的是比较经典的 C\/S (client\/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C ...
释待感冒: 您好,提问者:针对流行的数据库,业务逻辑复杂的项目会选用Oracle.而我们一般的需求大部分会才用开源的MySQL数据,小巧、方便!
陆丰市18425379497: 使用postgresql 和 mysql 哪个多 - ?
释待感冒: 您好,是这样的:1、MySQL相对来说比较年轻,首度出现在1994年.它声称自己是最流行的开源数据库.MySQL就是LAMP(用于Web开发的软件包,包括 Linux、Apache及Perl/PHP/Python)中的M.构建在LAMP栈之上的大多数应用都会使...
陆丰市18425379497: 为什么 PostgreSQL 没有 MySQL 流行 - ?
释待感冒: 1、MySQL崛起那会,PG虽然已经有许多高级特性,但那些特性互联网用不着,互联网需要的特性——快速——那时的PG不具备.历史延续下来,造成了今天的局面.可以说互联网成就了MySQL.2、MySQL的主从复制、增量备份比PG设置简单(知道PG的增量备份多耗磁盘不!),这些特性在互联网是很有用的.而旧的pg vacuum不如今天的友好.这些都限制了他在早期的崛起.3、不认为商业支持是主要原因——有几个用MySQL的是买了商业支持的?倒是有些心理上的影响.4、今天两者性能、特性上相差不多,而我认为pg略胜一筹,但大局在适时间内难改变——习惯造成的.
陆丰市18425379497: 目前最给力的数据库系统是哪些 - ?
释待感冒: 1. IBM 的DB2 作为关系数据库领域的开拓者和领航人,IBM在1977年完成了System R系统的原型,1980年开始提供集成的数据库服务器—— System/38,随后是SQL/DSforVSE和VM,其...
陆丰市18425379497: sqlite是什么样的数据库 - ?
释待感冒: sqlite是一种特别小型的数据库,我知道的就是应用于android手机开发中,android中每一个用到数据库的应用程序都会在其内部创建一个sqlite数据库!用来存储个人信息等等!这个数据库非常的小,但是功能很强大,一般mysql的命令在sqlite中都可以使用的!
陆丰市18425379497: sqllite,mysql,db2,sqlservice这些数据库是什么关系 - ?
释待感冒: SQLLite 是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/...
陆丰市18425379497: sqllite究竟是个什么样的数据库 - ?
释待感冒: 您好:SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快.
陆丰市18425379497: postgresql psql 怎么退出 - ?
释待感冒: 直接在命令行输入:quit或者是exist即可完成退出.备注:其实最简单的方法就是关闭登录窗口,或者切换用户的形式完成退出当前用户的数据库操作.
陆丰市18425379497: postgresql里怎么实现单个字段的数据相连 - ?
释待感冒: 如果你的 postgresql 的版本是 9.2 或者以上的话. 简单. 直接 string_agg(name, ',') 就可以了.
陆丰市18425379497: 我们知道mysql中有二进制日志binlog,在PostgreSQL当中有没相似的日志? - ?
释待感冒: show variables like '%binlog%';