gpt4 book ai didi

mysql - Postgres 9.1 与 Mysql 5.6 InnoDB?

转载 作者:IT老高 更新时间:2023-10-28 12:53:16 25 4
gpt4 key购买 nike

简单的问题 - 对于 2012 年要求与 ACID 兼容的中/大型数据库,什么会更好。

我已经阅读了有关 mySQL 与 pgSQL 的所有内容(大部分内容),但其中大多数帖子分别与版本 4,5.1 和 7,8 相关,并且已经过时(2008,2009)。现在快 2012 年了,所以我想我们可以尝试重新审视这个问题。

基本上我想知道 PostgreSQL 中是否有任何东西比 MySQL 的易用性、可用性和更大的开发人员/知识库更重要。

MySQL 的查询优化器还傻吗?在非常复杂的查询上它仍然非常慢吗?

打我! :)

PS。并且不要将我发送到护目镜或维基。我正在寻找一些具体的点而不是概述 + 我更信任 StackOverflow,而不是一些“聪明人”闪耀着光芒的随机页面。

附录

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

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

OLTP 或 OLAP:OLTP

最佳答案

PostgreSQL 在 SQL 功能方面要先进得多。

MySQL 还没有(而 PostgreSQL 有)的东西:

  • 可延迟的约束

  • 检查约束 (MySQL 8.0.16 添加了它们,MariaDB 10.2 有它们)

  • 全外连接
    MySQL 默默地使用带有一些语法变化的内连接:
    https://rextester.com/ADME43793

  • 横向连接

  • 正则表达式 don't work使用 UTF-8 (用 MySQL 8.0 修复)

  • 正则表达式不支持替换或子串 (与 MySQL 8.0 一起引入)

  • 表函数(select * from my_function())

  • 常用表表达式 (与 MySQL 8.0 一起引入)

  • 递归查询 (与 MySQL 8.0 一起引入)

  • 可写 CTE

  • 窗口函数 (与 MySQL 8.0 一起引入)

  • 基于函数的索引 (自 MySQL 8.0.15 起支持)

  • 部分索引

  • 在索引中包含附加列(例如,用于唯一索引)

  • multi column statistics

  • 事务表的全文搜索 (MySQL 5.6 支持)

  • 事务表上的 GIS 功能

  • EXCEPT 或 INTERSECT 运算符(MariaDB 有)

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

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

  • 您不能创建使用派生表的 View (自 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 triggers

  • exclusion constraints

  • key/value store

  • 索引完整的 JSON 文档

  • SQL/JSON 路径表达式(自 Postgres 12 起)

  • range types

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

  • 管理用户权限的角色(组) (MariaDB has them , Introduced with MySQL 8.0)

  • 并行查询(自 Postgres 9.6 起)​​

  • 并行索引创建(自 Postgres 11 起)

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

  • 物化 View

  • 自定义聚合

  • 自定义窗口函数

  • 正确的boolean数据类型
    (将任何可以转换为非零数的表达式视为“真”是不是正确的 bool 类型)

在空间/GIS 功能方面,带有 PostGIS 的 Postgres 功能也更加强大。 Here是一个很好的比较。

不确定您所说的“易用性”,但有几个 modern SQL features我不想错过的(CTE、窗口函数)将为我定义“易用性”。

现在,PostgreSQL 并不完美,而且可能是最令人讨厌的事情是,为一个繁重的写入数据库调整可怕的 VACUUM 进程。

关于mysql - Postgres 9.1 与 Mysql 5.6 InnoDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8181604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com