MySQL和PostgreSQL的比较

  • 时间:
  • 浏览:3
  • 来源:彩神官网

Query variables

不前要定义存储过程,直接在单个说说中定义变量。仅SQL Server和MySQL支持这个形态。 

使用例:

MySQL多引擎的优点

输出结果:

对以上数据,可能采用row by row的约束检查,下面的delete操作将失败,但在说说的最后评估则会成功。 delete from fk_test where id in (2,3,4);

早年PostgreSQL相关的中文技术资料和书籍不足,但目前可能比较充裕,而且每年就有新的中文PostgreSQL书籍诞生,PostgreSQL相关的技术交流和分享也很活跃。另外,PostgreSQL官方手册相当精良无论想入门还是深入均可受益,而且PostgreSQL中国用户会还在其官网上提供了中文版的手册。

binlog克隆的缺点

SELECT .. FOR UPDATE NOWAIT 

查询并锁住行用于将来的更新,当只有获得锁时报错而就有等待图片。

PostgreSQL中的数据库对应于文件系统的目录,表对应于文件系统的文件,但目录名和文件名就有PostgreSQL內部的id号,不处在非法字符和大小写的疑问。 PostgreSQL的每个表的数据和每个索引都存储在单独的文件中,而且文件操过1GB时,每个GB再拆分为一好几块 单独的文件。

参考:

MySQL是多任务管理器模型,PostgreSQL是多任务管理器模型。

正确的返回值是2,1。其它数据库的结果就有正确的唯独MySQL返回2,2。

另外发现,MySQL创建外键有个BUG,下面的说说表面上成功了,但实际上并那么创建FK。

PostgreSQL 

有查询缓存插件,使用案例似乎不想 见。

Index using a custom function 

使用定制函数创建索引

MySQL

索引类型支持Btree,hash,空间索引,全文检索。自动hash索引(或多或少场合性能不升反降)。Change Buffering优化索引更新。

Row constructor 

使用例:

PostgreSQL

PostgreSQL只有一好几块 开源主分支,代码托管在git.postgresql.org。另外,有或多或少公司发布了基于PostgreSQL增强的企业版产品,比如EnterpriseDB公司的EDB? Postgres Advanced Server,富士通的Fujitsu Enterprise Postgres等。哪几种产品就有闭源的商业产品,不属于开源软件的范畴。

User defined operators 

创建用户自定义操作符(主要为自定义数据类型)。

Substring 

基于正则表达式抽取次责字符串

MySQL的版本号由3组数字组成,比如5.7.1,每个数字的含义如下

MySQL在SQL层通过binlog记录数据变更并基于binlog实现克隆和PITR。另外在Innodb存储层有和其它数据库类事的redo log和undo log以支持事务的ACID。可能MySQL有两套日志,为了确保严格的持久性,以及保证一好几块 日志中事务顺序的一致,每次事务提交前要刷3次盘,严重影响性能。这或多或少 所谓的双1疑问(sync_binlog=1,innodb_flush_log_at_trx_commit=1)

DDL Triggers 

PostgreSQL支持下列时点的触发器

确实MySQL通过Group Commit的优化法律办法能只有在高并发时大大减少了刷盘的次数,但双1的配置对性能的影响仍然处在。或多或少不少生产系统并未设置双1,冒了主备数据不一致的风险。

Filtered aggregates 

使用例:

Tuple updates 

使用例:

MySQL的版本系列又分为开发版和General Availability (GA)版,只有GA版适合用于生产环境。

binlog克隆的优点

MySQL

MySQL分支较多 ,除了Oracle官方的版本,比较流行的还有Percona Server和MariaDB等。

Statement level triggers 

每个说说触发的触发器。MySQL只支持记录级别的触发器。

Check constraints

使用例:不允许薪水为负数

PostgreSQL支持而MySQL不支持的形态有6一好几块 ,如下。

Window functions 

SQL5003引入的形态,允许针对每一行计算分组值而整个分组只有一好几块 值。 使用例:计算每或多或少人在全公司的薪水排名和在其所在部门的薪水排名

PostgreSQL的主版本更新的周期更短,平均一年一次;而MySQL的主版本升级平均2年一次。PostgreSQL小版本升级或多或少 Bugfix不想增加新形态;而MySQL的小版本更新会增加和修改功能;而且,PostgreSQL提供的升级工具支持跨主版本升级,MySQL只有只有。而且PostgreSQL的版本升级风险更低也更加容易实施。

PostgreSQL

由来自世界不同公司的开发者组成的PostgreSQL社区主导PostgreSQL的开发,PostgreSQL社区的组织架构参考Contributor Profiles。开发过程删改开发,开发版的代码删改公开。任何人随时能只有通过pgsql-hackers邮件列表提交Patch。Patch可能会被commiter直接提交到源码树,也可能被要求加入到Commitfests以接受Review。通过Commitfests能只有了解当前开发版中蕴含的每个形态以及它们的进度。任何人不仅能只有提交Patch,甚至还能只有review Commitfests上的Patch。提交PostgreSQL Patch的删改请参考Submitting a Patch

PostgreSQL 

索引类型支持btree,hash,gist,sp-gist,gin,brin。已实现的索引算法包括R树,四叉树,基数树等。索引是可扩展的,支持次责索引,支持降序索引。

User defined datatypes

MySQL 

自带查询缓存,依赖的表更新时自动失效。每次读查询缓存都前要获取锁,或多或少场景下反而一蹶不振 了性能。适用场景有限,多建议禁用。

PostgreSQL 

有独立的轻量级连接池pgbouncer,已有大量用于生产的案例。

参考MySQL官方手册2.11.1 Upgrading MySQL

Exclusion constraints 

使用例:会议室预约,不允许同一会议的预约时间出显重叠。

MySQL 

企业版支持任务管理器池,社区版不支持。但Percona Server 5.6以上也支持任务管理器池,能只有做到说说级的连接复用。

Dynamic SQL in triggers 

在触发器函数中使用动态SQL

Delete triggers fired by cascading deletes 

可能ON DELETE CASCADE的外键因为的级联删除也触发删除触发器

RETURNING clause in a programming language 

RETURNING子句能只有返回DML的结果

客户端到数据库的连接通常使用连接池,而且数据库的最大连接数通常会被限制在50000以内,这能只有大大缓解多任务管理器创建删除和切上加本高的疑问。或多或少PostgreSQL的多任务管理器模型更占优势。(前要注意的是,可能PostgreSQL的多任务管理器模型,在Windows上的性能受到了一定的影响。)

Index on expression 

创建基于表达式或函数的索引。 使用例:

小版本升级(BugFix)

替换新版本数据库软件后重启PostgreSQL服务

Descending Index 

指定索引的排序顺序。对多列分别按不同顺序排序的场景怪怪的有用。

http://db-engines.com/en/ranking/

Add table column at specific position

增加列到指定的位置而就有上加到最后,这会影响"select *"输出的列顺序。但MySQL实现法律办法前要拷贝表,而且修改大表的定义很耗资源。

Recursive Queries 

Common Table Expressions的并就有特殊语法,可用于查询继承数据,比如列出一名员工所有的直接和间接上级。 使用例:计算1到5000的和(递归)

主版本发布合适1年1次,维护周期为5年,小版本升级合适一好几块 月1次。最近的几块主版本发布时间如下

Common Table Expressions 

SQL标准中的形态。很像子查询,不同的是能只有在一好几块 查询中被使用多次,而且错综复杂SQL的书写。 使用例:

升级法律办法

* In-place升级: 停机,替换MySQL二进制文件,重启MySQL,运行mysql_upgrade。 

* 逻辑升级:mysqldump导出数据,安装新版MySQL,加载数据到新版MySQL,运行mysql_upgrade。

MySQL的目标是每18~2一好几块 月发布一好几块 新发布系列的GA版本,最近几块发布系列的第一好几块 GA版本的发布时间如下。

使用例: create type address as ( zip_code varchar(5), city varchar(5000), street varchar(5000) );

MySQL的克隆传输的是SQL层的binlog记录,binlog记录的是数据的逻辑变更(SQL说说或基于行的数据变更),属于逻辑克隆;PostgreSQL的克隆传输的是WAL记录,WAL记录的是数据块的变更,属于物理克隆。

MySQL 5.7中能只有使用虚拟列达到相同的效果

Writeable CTEs

common table expression能只有使用一好几块 或多个DML

MySQL早期的定位是轻量级数据库,虽而且来做了或多或少增强,比如事务支持,存储过程等,但和其它常见的关系数据库比起来SQL形态的支持仍比较弱,目前宽泛的SQL 99的子集。 PostgreSQL的定位是高级的对象关系数据库,从一刚刚刚结束对SQL标准的支持比较全面,目前支持大次责的SQL:2011形态。

Read consistency during DML operations 

在一好几块 表的DML中,所有读应该读到该DML刚刚的值。下面的例子是交换一好几块 列的值。

MySQL的二级索引中存储的行位置就有Innodb表中的物理位置或多或少 Innodb表中的主键值。或多或少MySQL通过二级索引查找记录前要执行两次索引查找。而且可能主键太长,会不想 占用二级索引的存储空间,或多或少或多或少场景下,放弃自然主键而采用额外的自增字段作为主键效果会更好。

关于SQL形态支持情况汇报的对比,能只有参考http://www.sql-workbench.net/dbms_comparison.html

Arrays

Domains

在标准类型上施加约束,长度限制的领域类型 使用例:

Function overloading 

创建多个函数名相同但参数不同的函数。

PostgreSQL流克隆的优点

Clustered index

PostgreSQL确实不支持集蔟索引,但提供了cluster命令不想 达到类事的效果。

TRUNCATE Trigger

Custom aggregates 

使用SQL自定义聚集函数

Partial index 

允许索引表的子集而就有整个表 使用例:在所有活动项目中项目名前要唯一

Statement based constraint evaluation 

基于说说的约束评估 使用例:

OVERLAPS 检查时间间隔的重叠

Use target table in sub-queries 

在一好几块 DML中允许使用目标表多次。 使用例:删除表蕴含重复值的行

Replace 

基于正则表达式替换字符串

PostgreSQL能只有通过CASCADE联级TRUNCATE。

MySQL支持而PostgreSQL不支持的形态有好几块

PostgreSQL FDW的优点

MySQL不支持跨发布系列升级,新旧版本跨不想 个发布系列时,前要依次升级。比怎么能想从5.5升级到5.7,前要先升级到5.6再升级到5.7。

BETWEEN SYMMETRIC 

允许BETWEEN的上下边界是任意顺序

MySQL多引擎的缺点

PostgreSQL中存储元数据的系统表和普通表的存储格式删改相同,这使得PostgreSQL很容易扩展,而且PostgreSQL的DDL操作也支持事务。

Triggers on views 

在视图上创建触发器

参考PostgreSQL官方手册17.6. Upgrading a PostgreSQL Cluster

PostgreSQL的MVCC实现法律办法的缺点

Deferred constraints

定义约束在提交阶段而就有说说执行进行检查。对于外键约束,这能只有使插入删除说说不想考虑执行的顺序。

MySQL和PostgreSQL是目前主流的一好几块 开源关系数据库,同样就有开源产品,亲戚亲戚朋友该怎么选型呢?MySQL长期以来被认为是更加快速但支持的形态较少;而PostgreSQL则提供了充裕的形态一个劲被描述为开源版的Oracle。MySQL可能可能它的快速和易用变得非常流行,但PostgreSQL正得到不想 来自Oracel或SQL Server背景的开发人员的追从。 而且或多或少假设可能变得过时可能不正确了,MySQL可能加入了或多或少高级形态,PostgreSQL也大大提高了它的下行速率 。本文针对最新的MySQL 5.7 and PostgreSQL 9.5进行对比。

Check constraints using custom functions 

使用定制函数实施Check约束 使用例:

PostgreSQL对长度大于127字节的字段值采用被称为TOAST (The Oversized-Attribute Storage Technique)的技术进行存储。即将哪几种大字段切分为若干个chunk存储在这个堆表对应的toast表中,每个chunk占一行,最大5000字节,原始表中仅仅存储一好几块 指针。而且PostgreSQL可能会对长度大于127字节的数据自动进行压缩。得益于TOAST技术,PostgreSQL不想 很好的除理蕴含大字段的表。

MySQL的数据库名直接对应于文件系统的目录名,表名直接对应于文件系统的文件名。这因为MySQL的数据库名和表名支持的字符以及算是大小写敏感都依赖于文件系统。 MySQL的表定义存储在怪怪的的.frm文件中,DDL操作不支持事务。 MySQL的所有Innodb表数据能只有存储在单个.idb文件中,不想 只有每个表一好几块 .idb文件(通过参数innodb_file_per_table控制),即使每个表一好几块 .idb文件,同一好几块 表的数据和索引就有这个好几块 文件里。 MySQL的Innodb表的存储格式是Btree索引组织表,每个表前要有主键,可能创建表时那么指定主键,MySQL会创建一好几块 內部主键。索引组织表的优点是按主键查询快,但数据插入时可能主键就有递增的,会因为Btree树大量分裂影响性能。

MySQL

MySQL分商业版和社区版,社区版为GPL许可,允许免费使用,而且可能让人分派你的代码,让人挑选开源,可能闭源,可能挑选闭源则前要向ORACLE支付费用。

升级法律办法

主版本升级(形态增强)

MySQL的SQL层和存储层分离,支持多种存储引擎,类事InnoDB, MyISAM, NDB。PostgreSQL和绝大多数数据库一样是单存储引擎,而且PostgreSQL能只有通过FDW支持其它的储存形式,比如csv,mysql,hadoop等。

Use a temporary twice in a single query 

MySQL中在单个查询中使用临时表2次会报错

TRUNCATE table with FK 

MySQL不支持TRUNCATE有外键引用的表。

PostgreSQL 

1.explain易于理解(树状显示,cost,实际执行时间,buffer和IO使用) 

2.统计信息充裕(直方图分布统计,频繁值统计,顺序性等) 

3.支持nest loop,merged sort和hash join 

4.错综复杂查询表现优异

MySQL可能非常流行,国内相关技术书籍和资料非常多。但缺少较新的中文手册,目前能只有找到的最新的MySQL中文手册是MySQL 5.1。

MySQL 

1.explain不易理解,trace信息过细。 

2.统计信息不足(只有总记录数和索引列的唯一值数,尚未GA的MySQL8.0支持直方图) 

3.只支持nest loop join 

4.错综复杂查询性能不佳

PostgreSQL FDW的缺点

PostgreSQL和其它常见数据库(比如Oracle)不一样的地方在于,它只有redo log(PostgreSQL中称之为WAL)那么undo log。数据处在变更时,PostgreSQL通过记录在堆表的每个行版本的事务id,识别被更新或删除的旧数据。可能旧数据就在保处在堆表中,不前要undo log就能只有支持事务的回滚。 PostgreSQL的MVCC实现法律办法的优点

RETURNING clause as a result set 

使用例:

MySQL在WEB类业务上非常流行,尤其在互联网行业几乎是标配。就有用于其它业务的案例。 可参考:http://www.mysql.com/customers/

Views with derived tables 

视图中蕴含派生表。MySQL中出显这个情况汇报会报错

更有意义的例子请参考:http://www.sql-workbench.net/comparison/recursive_queries.html

下面是MySQL和PostgreSQL的SQL形态支持差异的说明

Dynamic SQL in functions 

在函数中使用动态SQL 使用例:

可能Drop被视图引用的列,PostgreSQL会报错并提示使用DROP ... CASCADE。

ALTER a table used in a view 

修改被视图使用的表定义而不前要DROP视图。而且这可能会因为视图失效。

PostgreSQL

PostsgreSQL是类BSD许可,允许用户以任何目的免费使用。

Built-in scheduler

PostgreSQL的pgagent插件能只有达到相同的效果,而且PostgreSQL提供了章 45. 后台工作任务管理器机制,能只有比较容易的定制调度任务。

以上翻译自MySQL的官方手册2.1.1 Which MySQL Version and Distribution to Install。

MySQL显然更加流行,有观点认为,PostgreSQL之所远不如MySQL流行,是或多或少因素一起去作用的结果。

PostgreSQL的版本号由3组数字组成,比如9.5.1。其中前一好几块 数字构成了主版本号,第好几块 数字代表小版本号。小版本发布通常或多或少 Bugfix,而且不想改变內部存储格式而且一个劲与刚刚的相同主版本的发布版本兼容。

PostgreSQL在各个行业均有应用案例。国内的知名用户包括:阿里巴巴,腾讯, 平安,移动,华为, 中兴,去哪儿, 斯凯, 云游, 顺丰,高德,探探等。或多或少用户看中了PostgreSQL的稳定可靠,错综复杂查询和GIS除理能力,怪怪的是GiS,从或多或少实际用户的选型和反馈来看,PostgreSQL+PostGiS被认为是目前最有优势的开源GiS数据库方案。 可参考:http://www.postgresql.org/about/users/

http://db-engines.com/en/ranking_trend/system/Oracle;MySQL;Microsoft%20SQL%20Server;Mongodb;PostgreSQL

SELECT without a FROM clause 

不带where条件时,MySQL是支持的。

注:MySQL也支持FDW,但目前只有mysql的FDW,就有主流。

确实这个项PostgreSQL也支持,但PostgreSQL不允许Drop被视图引用的列和修改列定义。 对其它类型的表修改,视图仍然有效。

Table functions 

PostgreSQL中函数的返回值能只有是表 使用例:生成序列的函数

PostgreSQL流克隆的缺点

但PostgreSQL凭借其充裕的形态和日益提升的性能,用户量正呈现出快速上升的势头。而且在PostgreSQL接受程度较高的日本市场,PostgreSQL的用户量和MySQL相当,甚至超过。

MySQL

MySQL由Oracle主导其开发,开发过程不想透明Oracle开发团队以外的人可通过MySQL Bug系统提交Patch,Oracle开发团队会吸收或改写Patch。另外,代码贡献者需先回应Oracle Contribution Agreement (OCA)才允许提交Patch。

猜你喜欢

ASP.NET Core on K8S深入学习(3

_PS:_默认parallelism值为1(1)CloudMan,《每天5分钟玩转Kubernetes》下面是yaml配置文件对于DaemonSet资源清单的定义: 前要都看,

2020-03-22

Linux运维人员需要掌握一门编程语言吗?

我是南非蚂蚁,二个多年从事运维一线工作者,将会想学习Linux运维技能,可看看我录制的运维技术实战视频!最近时不时有同行的大伙将会Linux初学者问我:运维人员否是是须要学一门

2020-03-22

数据进入MaxCompute的N种方式

晋恒浏览量:1618收藏:0下载数:253所需积分:0MaxCompute大数据数据仓库批量计算数据同步所需积分:0下载人数:253立即下载了解更多MaxCompute产品和技

2020-03-21

软硬件一体化的高性能网络

帮助您基于阿里云构建出另1个 隔离的网络环境。您能能完整掌控当时人的虚拟网络,如选用自有IP地址范围、划分网段、配置路由表和网关等...阿里巴巴首席工程师王海勇在2017杭州

2020-03-21

OCR:图文结构理解探索和实践

立足于对政务信息化的深刻理解,在云计算和大数据技术上持续创新,构筑开放共享、敏捷高效、安全可信的政务云基础架构,并通过与政府行业...阿里巴巴自主研发的海量数据实时高并发在线分

2020-03-21