Postgresql 与 MySQL - 哪个更适合连接查询和写入数据(插入)

Tec*_*hie 2 mysql postgresql performance database-design

我必须设计一个数据库,它最终会在单个表中包含 50M 条记录(还有其他表的记录数较少)。我更关心连接查询和将数据(插入)写入数据库。更新和删除查询会更少。

我已经阅读了这篇关于 Postgresql 与 MySQL 的性能比较的文章

我也浏览了以下链接。

/sf/ask/572712311/

/sf/ask/7764921/

/sf/ask/50740721/

MySQL 与 PostgreSQL 维基

MySQL vs PostgreSQL:为什么 MySQL 优于 PostgreSQL

我的问题是 stackoverflow 上的一些链接已经过时了。有些人说Mysql更好,反之亦然。

因为我更关心连接查询和将数据写入数据库哪个更适合我?Postgresql 与 MySQL?我应该采取什么方法来设计这样的数据库?

鉴于请不要将此视为另一个 Postgresql vs MySQL 问题。我已经完成了我的研究,我只关心连接查询和将数据写入数据库场景。我还了解到 PostgreSQL 更适合 GIS 数据。.

Chr*_*ers 12

数据库不一样。一般来说,答案很大程度上取决于您的具体查询。就一般用例而言,由于一些原因,我希望 PostgreSQL 表现得更好,但在某些情况下,我希望 MySQL 表现得更好。

在 PostgreSQL 中,所有表都是堆表。在 MySQL 中,所有 innodb 表都是 btree 索引,有效负载中包含元组。这意味着 MySQL 上的主键查找速度更快,而 PostgreSQL 上的一般查询速度更快。这也意味着您通常需要在 MySQL 上使用更多索引,这会减慢写入速度。

例如,我希望以下查询在 MySQL 上比在 PostgreSQL 上执行得更好:

SELECT u.username, p.* 
  FROM users u
  JOIN preferences p ON u.id = p.user_id
 WHERE u.id = 123;
Run Code Online (Sandbox Code Playgroud)

如果两个表共享相同的主键(u.id 和 p.user_id),则两个表中都有数千行,依此类推。

另一方面,我希望以下查询在 PostgreSQL 上的性能比 MySQL 更好,因为数据库太大而无法放入内存、非缓存数据、适当的索引、大小合适的表等:

SELECT c.legal_name, a.*
  FROM company c
  JOIN address a on a.company_id = c.id
 WHERE a.zip_code like '95%' and country = 'us';
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您必须使用其他索引,这意味着 MySQL 上有很多额外的随机磁盘 I/O。

我期望的第二个问题是写入性能。我希望 PostgreSQL 在这里普遍获胜,因为堆表允许在任何方便的地方插入,并且维护的索引较少也会有帮助。

  • 您可以补充说 MySQL 只有嵌套循环连接算法,对于某些类型的连接来说,它的效率低于哈希连接(Postgres 有) (3认同)