今天我一直在处理一些 MySQL 性能问题。我使用 EXPLAIN 查找表扫描并通过创建索引修复了一些问题。
我的阅读速度超快。
但是从那以后,更新查询就很成问题了。当我重新启动 Mysql 时,前几次插入或更新工作正常。之后,更新查询在 60 秒后开始显示错误“超出锁定等待超时;尝试重新启动事务”。
Mysql 是否在每次插入/更新时重新创建大型索引?我该如何解决这个问题?
最佳答案
是的,MySQL 在每次更新时重新创建索引。你需要找到甜蜜点。仅将索引放在将用于 WHERE
条件(或加入 ON
条件)的键上。
如果你索引所有东西,你的更新会太慢。如果您什么都不索引,您的读取速度就会太慢。
如果在将索引缩小到您需要的范围后您仍然遇到性能问题,您可能应该重新评估您的数据结构。
关于MySQL,索引和 "Lock wait timeout exceeded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4465750/