【问题标题】:Optimizing mysql/postgresql for create and update优化 mysql/postgresql 以进行创建和更新
【发布时间】:2025-12-16 14:25:03
【问题描述】:

据我所知,大多数 RDBMS 包都是在构建时牢记 99% 的查询将是选择查询。但是,我的情况是,我们至少有 50% 的查询作为创建/更新查询。由于我们还需要持久性,所以我们不能选择 NoSQL 解决方案。本质上,只要有更新,就应该立即永久存储。所以,我想知道 MySQL 的性能是否会因此受到阻碍。我们当前的 MySQL 引擎是 InnoDb。还有其他 MySQL 引擎更可取吗?我计划使用 Amazon RDS,所以我的重点是 MySQL;但出于好奇,我想知道 postgresql 是否可以提供帮助。

注意- 只是为了说明规模,我们正在讨论在投入生产的几个月内对至少有一百万个条目的表创建/更新查询。

【问题讨论】:

  • 尽可能多地对表进行分区,并且不要让其增长太多。从一开始就扩展您的表格。

标签: mysql postgresql select rdbms


【解决方案1】:

如果您的工作集适合内存,您的插入和更新往往会非常快。正如其他人所提到的,分区在这里可以提供帮助。大多数 NoSQL 解决方案都具有持久性,因此您不应完全排除它们。 Cassandra 有一个专门针对写入调整的存储模型,可能值得一看。

如果您使用 MySQL,则有一些调整参数可以用一些持久性来换取插入性能,以及各种其他硬件和软件设置:

https://serverfault.com/questions/118504/how-to-improve-mysql-insert-and-update-performance

在标准磁盘上使用完全耐用性时,您可能会期望每秒大约 100 次插入。如果这不能解决问题,请设置基准并开始调整参数或准备进行一些重新架构。基准测试在表中使用真实数量的数据非常重要。现在发现问题比在表格开始填充 6 个月后发现问题要好得多。合成数据很好,只要确保索引字段的分布相似。

【讨论】:

    【解决方案2】:

    尽可能少的索引可以提高插入和更新的速度,因为在向表中插入/更新行时,所有索引都必须得到更新。 但当然,请记住,某些索引可能还会增加您的更新。

    【讨论】:

    • 对于更新,并非所有索引都必须更新。只有那些包含已更改的列(至少对于 Postgres)。并且索引也可以加速 UPDATE(如果 WHERE 条件可以使用索引)
    • 是的,通过索引加快 UPDATES 是我在第二句话中提到的。有点误会了。