我有一张包含 15 万行的 mysql 表,并定期进行更新。更新可能需要 1-3 秒。我有什么办法可以缩短更新时间?

我有一张包含 15 万行的 mysql 表,并定期进行更新。更新可能需要 1-3 秒。我有什么办法可以缩短更新时间?

我有一张包含 15 万行的表 (mysql)。白天有多次更新 (1000 次),将一个 int 值更改为另一个 int 值 (更新表设置字段 = ? 其中 table.id = ?)。UPDATE 查询中没有什么复杂的。

迁移到 Mongo db 之类的东西会更快吗?数据库的读取(选择)次数比写入次数多 100 次(1000 次?)。我有什么选择?

答案1

  • 看看如何针对机器调优 MySQL。开箱即用的 MySQL 使用非常保守的内存数字,因此它可以在任何地方运行,每次投入生产之前都需要进行调优
  • 使用 EXPLAIN 等分析工具查看查询命中了多少个索引。如果你可以减少需要修改的索引数量,这将提高更新性能
  • 有一些方法可以重建或优化索引本身

可以考虑移动数据库,但首先要了解问题所在,然后着手解决容易解决的问题。有比您的数据库大得多的 MySQL 数据库可以顺​​利运行,这并不意味着您已经达到了技术本身的极限。与大多数性能问题一样 - 虽然这并不总是最好的解决方案,但通常可以通过调整或添加缓存来解决。

答案2

你没有提供太多背景信息,所以很难给出答案,但我相信,结合一些想法,应该能给你一个答案

  • 您可以查看许多更新优化。其中,您的表是否在 table.id 上正确索引,以及您是否分配了足够的内存来高效地执行您要尝试的操作?您是否使用了“准备好的”语句?数据库优化是一个庞大的课题。

  • Mongo db 不是关系数据库,因此重写代码以使用 Mongo 是否有意义,或者是否可以通过重构部分代码更轻松地实现这一点(也许将 150k 行存储为内存数组并简单地修改此数组,定期将其备份到磁盘?????)

答案3

假设您已经优化了查询并正确建立了索引。

你可以:

  1. 投入额外的硬件来减少时间
  2. 尝试缩短更新调用者和数据库之间的连接距离(假设它们不在同一个盒子上)
  3. 如果事先知道变化的值,则优先缓存(如果可能)

相关内容