我正在从数据库中删除大约1.8GB的数据。 (通过C#app)
在较小的数据库(~600MB)上运行相同的操作没有问题,但是在我得到的大数据库上:
超过锁定等待超时;尝试重新启动交易。
innodb_lock_wait_timeout
会解决问题还是有另一种方式?
我不认为优化查询是一种解决方案,因为没有办法让它们变得更简单。
我正在删除有关条件和关系的部分数据,而不是所有数据。
答案 0 :(得分:0)
您可以将删除语句拆分为不会超时的较小部分 就像从id 1到1000删除这些东西,执行和提交,对ids 10.000 -20.000等做同样的事情。
答案 1 :(得分:0)
您提到您是......根据某些条件和关系删除部分数据,而不是所有数据'。我会检查你用来过滤要删除的数据的所有密钥都有适当的索引。
如果您向我们展示您的架构和where子句,我们可以建议可能有用的内容。
您还应该考虑将删除分成多批较少数量的行。
另一种选择是进行SELECT INTO,只需将保持的数据放入另一个表中,删除原始数据,然后重命名此新表。
答案 2 :(得分:-1)
右键单击表格 - >脚本表为 - >创建至 - >新查询..保存查询...
右键单击表格 - >删除
刷新您的数据库和智能感知以忘记该表,然后运行将重新创建表的脚本,这就是您有一个空表...
或者你可以简单地增加innodb_lock_wait_timeout(或table_lock_wait_timeout,不确定哪个)的设置,如果你不想删除表中的所有信息
答案 3 :(得分:-1)
如果要删除表格中的所有行,请使用
Truncate table *tablename*
delete命令在完成任务时使用事务日志,但truncate会在没有记录的情况下清除它。