MySQL,索引和 "Lock wait timeout exceeded"

标签 mysql indexing

今天我一直在处理一些 MySQL 性能问题。我使用 EXPLAIN 查找表扫描并通过创建索引修复了一些问题。

我的阅读速度超快。

但是从那以后,更新查询就很成问题了。当我重新启动 Mysql 时,前几次插入或更新工作正常。之后,更新查询在 60 秒后开始显示错误“超出锁定等待超时;尝试重新启动事务”。

Mysql 是否在每次插入/更新时重新创建大型索引?我该如何解决这个问题?

最佳答案

是的,MySQL 在每次更新时重新创建索引。你需要找到甜蜜点。仅将索引放在将用于 WHERE 条件(或加入 ON 条件)的键上。

如果你索引所有东西,你的更新会太慢。如果您什么都不索引,您的读取速度就会太慢。

如果在将索引缩小到您需要的范围后您仍然遇到性能问题,您可能应该重新评估您的数据结构。

关于MySQL,索引和 "Lock wait timeout exceeded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4465750/

相关文章:

mysql - SELECT(MAX) 不会超过 10 - 带有 phpmyadmin 的 mysql

MySQL 错误未知变量 LOG_OUTPUT

performance - 高效查询PostgreSQL中包含数组列的条件表

python - numpy rearray 的花哨索引在分配后丢失了引用

php - header 函数在 php 中不起作用

c# - Visual Studio MySQL 数据集错误

c++ - 谁拥有 MySQL Connector C++ 返回的内存?

MongoDB 索引和 $or 运算符

indexing - 如何判断 ContentSearchManager.GetIndex(SitecoreIndexableItem) 尝试使用什么索引

Grails MongoDB 索引嵌入式字符串列表