我正在使用一个程序,该程序有多个节点(服务器)将行插入到单个 MySQL 服务器表中。
由于它们正在写入同一个表,因此显然会使用锁,并且每个节点都必须等待才能插入。
我觉得每个节点都可以写入一个单独的表以加快操作速度,稍后我们可以在程序完成后将所有表中的行合并到一个表中。
我的主管说这行不通,因为 MySQL 写入多个表需要相同的时间。
这是真的吗?如果我写入单独的表,不会有性能/时间差异吗?我以为MySQL会使用单独的线程。或者是因为多个进程插入会导致硬盘负载增加而导致延迟?
最佳答案
一般来说,MySQL 不会使用单独的线程来写入单独的表。不过,管理写入的方式最终取决于表引擎,而不是严格由MySQL服务器管理。
MySQL 文档描述了 threads used by MySQL on different platforms :
- 用于各种连接
- 复制
- 信号
- 磁盘刷新
- 事件调度程序
- innodb 特定线程
但是您可以从列表中看到,每次写入表时没有单独的线程。
通常也不能说同时写入多个表比将相同数据写入同一个表更快。首先,无论存储多少张表,都需要写入相同的数据。
如果您有一个表,那么显然对该表的锁定可能会减慢对该表的插入速度,但 MySQL 的默认 innodb 表类型可以很好地处理这种情况 - 它是为高并发使用而设计的。
如果将相同的数据写入多个表,那么您必须发出多个sql语句,还需要添加额外的引用数据以确保各个表中的数据可以连接在一起。使用单表方法就不会产生这种开销。
总而言之:您不能假设多表插入方法更快。您可以进行详细的测试来分析和证明在您的特定情况下多表方法比单表方法效果更好,但即使在这种特定情况下,结果也必须非常有说服力才能改变设计,而且仍然有一些对 MySQL 进行配置更改可能会提供比设计更改更好的解决方案。
关于mysql - 当插入两个不同的表时,MySQL 是否提高了性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42064228/