当前位置:  开发笔记 > 编程语言 > 正文

Postgres 9.1 vs Mysql 5.6 InnoDB?

如何解决《Postgres9.1vsMysql5.6InnoDB?》经验,为你挑选了3个好方法。

简单的问题 - 在2012年需要与ACID兼容的中型/大型数据库会更好.

我已经阅读了关于mySQL vs pgSQL的所有内容(大多数内容),但大多数内容分别与版本4,5.1和7,8有关并且过时(2008,2009).它几乎是2012年,所以我想我们可以尝试重新审视这个问题.

基本上我想知道PostgreSQL中是否有任何东西超出了MySQL的易用性,可用性和更大的开发人员/知识库.

MySQL的查询优化器仍然是愚蠢的吗?在非常复杂的查询上它仍然超级慢吗?

打我!:)

PS.不要把我送到护目镜或维基.我正在寻找一些不是概述的具体要点+我相信StackOverflow比一些随机页面更能让'聪明的家伙'发光.

附录

项目规模:假设一个订单系统,每个帐户大约10-100个订单/天,几千个帐户,最终,每个可以有几百到几千个用户.

擅长:在需求不断增长和变化时具有前瞻性和灵活性.在硬件部门保持低成本方面,性能也很重要.此外,熟练劳动力的可用性也是一个因素.

OLTP或OLAP:OLTP



1> a_horse_with..:

在SQL功能方面,PostgreSQL更加先进.

MySQL仍然没有的东西(和PostgreSQL有):

可延迟的约束

检查约束

完全外连接
MySQL默默地使用内部连接和一些语法变体: http
://sqlfiddle.com/#!2/88ff95/1 SQLFiddle是使用MySQL 5.5.32创建的

横向连接

正则表达式不适用于UTF-8(使用MySQL 8.0修复)

正则表达式不支持replace或substring(MySQL 8.0引入)

表函数(select * from my_function())

公用表表达式(MySQL 8.0引入)

递归查询(MySQL 8.0引入)

可写的CTE

窗口函数(MySQL 8.0引入)

基于功能的指数

部分指数

事务表上的全文搜索(MySQL 5.6支持此功能)

事务表上的GIS功能

EXCEPT或INTERSECT运算符

你不能在同一个select语句中使用两次临时表

您不能在子选择中使用正在更改的表(更新/删除/插入)

您无法创建使用派生表的视图(自MySQL 8.0以来可能)

 create view x as select * from (select * from y);

语句级读取一致性.需要例如:
update foo set x = y, y = x
update foo set a = b, a = a + 100

交易DDL

DDL触发器

排除约束

键/值存储

索引完整的JSON文档

范围类型

数组(包括数组上的索引)

角色(组)来管理用户权限(MariaDB 有它们,MySQL 8.0引入)

并行查询(自Postgres 9.6起)

用户定义的数据类型(包括检查约束)

物化观点

自定义聚合

自定义窗口功能

正确的boolean数据类型
(将任何可以转换为非零数字的表达式视为"true" 不是一个合适的布尔类型)

不确定你称之为"易用性",但有一些现代SQL功能我不想错过(CTE,窗口函数),这些功能将为我定义"易用性".

现在,PostgreSQL不是完美的,可能是最讨厌的事情,可以调整可怕的VACUUM进程来处理繁重的写入数据库.



2> Richard Huxt..:

MySQL的查询优化器仍然是愚蠢的吗?在非常复杂的查询上它仍然超级慢吗?

所有查询优化器有时都很愚蠢.在大多数情况下,PostgreSQL不那么愚蠢.PostgreSQL的一些最新SQL功能(窗口函数,递归WITH查询等)非常强大,但如果你有一个愚蠢的ORM,它们可能无法使用.

项目规模:假设一个订单系统,每个帐户大约10-100个订单/天,几千个帐户,最终,每个可以有几百到几千个用户.

听起来不那么大 - 在一个大箱子的范围内.

擅长:在需求不断增长和变化时具有前瞻性和灵活性.

PostgreSQL拥有一支强大的开发团队,拥有一个扩展的贡献者社区.发布策略是严格的,只有点发布中的错误修正.始终跟踪错误修正的9.1.x的最新版本.

MySQL过去对版本号的态度稍微宽松一些.这可能会随着Oracle的负责而改变.我不熟悉各种叉子的政策.

在硬件部门保持低成本方面,性能也很重要.

如果硬件成为这个规模的项目中的主要组件,我会感到惊讶.

此外,熟练劳动力的可用性也是一个因素.

那是你的关键决策者.如果你有一群经验丰富的Perl + PostgreSQL黑客闲置,请使用它.如果您的人员知道Lisp和MySQL,那么就使用它.

OLTP或OLAP:OLTP

PostgreSQL在OLTP上一直很强大.

我个人的观点是,PostgreSQL邮件列表中充满了礼貌,乐于助人,知识渊博的人.您可以与Terabyte数据库和黑客建立直接联系,这些数据库和黑客已经构建了代码的主要部分.支持的质量非常好.



3> Roman Pekar..:

作为@a_horse_with_no_name回答的补充,我想在PostgreSQL中列出一些我非常喜欢的功能:

数组数据类型 ;

hstore扩展 - 对于存储key->value数据非常有用,可以在该类型的列上创建索引;

各种语言扩展 - 我发现Python在非结构化数据处理方面非常有用;

distinct on 语法 - 我认为这个应该是ANSI SQL特性,对我来说看起来很自然(而不是MySQL语法);

复合类型;

记录类型;

继承 ;

9.3版功能:

横向连接 - 我从SQL Server中错过了一件事(它称为外部/交叉应用);

原生JSON支持 ;

DDL触发器 ;

递归的,物化的,可更新的视图;


关于Postgres,我最喜欢的一件事是(在撰写本文时)它对于分组有最准确的SQL标准实现(据我所知).您不能按列进行分组,除非它们包含在聚合函数或group by子句中,*或功能相关*包含在group by子句中包含的列中,因此,如果在组中包含表的主键列,则子句,您不必包含该表中的所有其他列.[关于SQL小提琴的例子](http://sqlfiddle.com/#!12/d2e67/3)
推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有