4

尝试从表中删除行时,我不断收到这些错误。这里的特殊情况是我可能同时运行 5 个进程。

该表本身是一个包含约 450 万行的 Innodb 表。我的 WHERE 子句中使用的列没有索引。其他指数按预期工作。

它是在事务中完成的,首先我删除记录,然后插入替换记录,并且只有在插入所有记录时才提交事务。

错误信息:

查询错误:超过锁定等待超时;在执行 DELETE FROM tablename WHERE column=value 时尝试重新启动事务

在此处的引用列上创建索引会有所帮助吗?我应该明确锁定行吗?

我在问题#64653中找到了一些附加信息,但我认为它不能完全涵盖我的情况。

确定是 DELETE 语句导致了错误,还是查询中的其他语句?DELETE 语句是第一个语句,所以看起来合乎逻辑,但我不确定。

4

2 回答 2

3

索引肯定会有所帮助。如果您尝试替换已删除的记录,我建议您修改查询以使用更新而不是 DELETE 后跟 INSERT,如果可能的话:

INSERT INTO tableName SET
column2 = 'value2'
WHERE column = value
ON DUPLICATE KEY UPDATE
column2 = 'value2'
于 2009-12-07T13:27:54.400 回答
1

索引肯定有帮助。我曾经在一个包含用户数据的数据库上工作。Web 前端和用户删除有时会出现问题。白天它工作得很好(虽然花了很长时间)。但是在下午晚些时候它有时会超时,因为数据库服务器由于一天结束的处理而承受更多的负载。在受影响的列上敲击一个索引,从那里开始一切顺利。

于 2009-12-07T13:33:58.367 回答