从巨大的数据库中删除

时间:2013-05-21 14:21:00

标签: c# mysql innodb delete-row corresponding-records

我正在从数据库中删除大约1.8GB的数据。 (通过C#app)

在较小的数据库(~600MB)上运行相同的操作没有问题,但是在我得到的大数据库上:

  

超过锁定等待超时;尝试重新启动交易。

innodb_lock_wait_timeout会解决问题还是有另一种方式?

我不认为优化查询是一种解决方案,因为没有办法让它们变得更简单。


我正在删除有关条件和关系的部分数据,而不是所有数据。

4 个答案:

答案 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会在没有记录的情况下清除它。