尝试从表中删除行时,我一直收到这些错误。这里的特例是我可能同时运行5个进程。
表本身是一个约有450万行的Innodb表。我的WHERE子句中使用的列没有索引。其他指数正在按原样运作。
它是在一个transcation中完成的,首先我删除记录,然后插入替换记录,并且只有在插入所有记录时才应该提交事务。
错误讯息:
查询错误:超出锁定等待超时;尝试在执行DELETE FROM tablename WHERE column = value
时重新启动事务
在此处为引用列创建索引会有帮助吗?我应该明确锁定行吗?
我发现了一些有问题的其他信息#64653,但我认为它并未完全涵盖我的情况。
确定是导致错误的DELETE语句,还是查询中的其他语句? DELETE语句是第一个,所以它似乎合乎逻辑,但我不确定。
答案 0 :(得分:3)
索引肯定会有所帮助。如果您尝试替换已删除的记录,我建议您修改查询以使用更新而不是DELETE,然后插入INSERT,如果可能的话:
INSERT INTO tableName SET
column2 = 'value2'
WHERE column = value
ON DUPLICATE KEY UPDATE
column2 = 'value2'
答案 1 :(得分:1)
索引绝对有帮助。我曾经在一个包含用户数据的数据库上工作。 Web前端和用户删除有时会出现问题。白天工作得很好(虽然花了很长时间)。但是在下午晚些时候,它有时会超时,因为数据库服务器由于一天的处理而处于更多负载状态。 在受影响的列上敲了一个索引,一切都从那里顺利进行。