Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从大型数据库中删除_C#_Mysql_Innodb_Delete Row_Corresponding Records - Fatal编程技术网

C# 从大型数据库中删除

C# 从大型数据库中删除,c#,mysql,innodb,delete-row,corresponding-records,C#,Mysql,Innodb,Delete Row,Corresponding Records,我正在从大约1.8GB的数据库中删除数据。通过C应用程序 同样的操作在较小的数据库(约600MB)上运行没有问题,但在较大的数据库上我得到: 超过锁定等待超时;尝试重新启动事务 innodb_lock_wait_timeout会解决问题吗?还是有其他方法 我不认为优化查询是一个解决方案,因为没有办法使它们更简单 我正在删除关于条件和关系的部分数据,而不是全部数据。右键单击表->将表作为脚本->创建到->新建查询。。保存查询 右键单击表格->删除 刷新数据库和Intellisense以忘记该表,然

我正在从大约1.8GB的数据库中删除数据。通过C应用程序

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

超过锁定等待超时;尝试重新启动事务

innodb_lock_wait_timeout会解决问题吗?还是有其他方法

我不认为优化查询是一个解决方案,因为没有办法使它们更简单


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

右键单击表->将表作为脚本->创建到->新建查询。。保存查询

右键单击表格->删除

刷新数据库和Intellisense以忘记该表,然后运行脚本重新创建该表,这就是为什么会有一个空表


或者您可以简单地增加innodb_lock_wait_timeout或table_lock_wait_timeout的设置,但不确定如果不想删除表中的所有信息,可以将delete语句拆分为不会超时的较小部分。
如从id 1到1000删除这些内容,执行并提交,对id 10.000-20.000等执行相同操作。

如果要删除表中的所有行,请使用

 Truncate table *tablename* 

delete命令在完成任务时使用事务日志,但truncate在不记录日志的情况下清除事务日志

您提到您正在“…根据某些条件和关系删除部分数据,而不是所有数据”。我将检查您用于筛选要删除的数据的所有键上是否有适当的索引

如果您向我们展示您的模式和where子句,我们可以建议一些可能有用的

你也应该考虑把你的删除分成多个较小的行数。


另一种替代方法是执行SELECT INTO,只将要保留在另一个表中的数据放入另一个表中,删除原始数据,然后重命名此新表

考虑为您的删除调用添加适当的索引,或者确保您正在使用现有的索引。我也很好奇为什么会将其标记为C。您能将删除批处理成更小的块吗?这是我唯一的希望,但我在这里发布之前检查了这一点:它是用C标记的,因为delete是在一个C应用程序中运行的,该应用程序必须清理数据库,我很好奇C是否对mysql操作有一些内存限制?你应该修改你的问题,包括1个delete命令,2个带索引的表模式,3个你打算用该命令删除的1.8GB中有多少。谢谢,但这不是我的解决方案。我在不同的服务器上有不同的数据库,为所有服务器保存就绪查询是毫无意义的。或者您可以简单地增加innodb_lock_wait_timeout或table_lock_wait_timeout的设置,但不确定如果您不想删除table中的所有信息,如果表的索引不良,删除一行可能会导致超时。这可能是一个解决方案,但C会处理吗?我在一些表格中有百万或五十万条记录/您是使用实体、nhibernate还是直接连接?如果你只是使用普通连接器,那么你必须自己做,因为没有进行优化。纯C和.NET 2.0它很旧,但它是必需的。它也可能是连接器超时吗?如果您无法找到增加超时的方法,那么恐怕您没有其他选择。我将根据某些条件和关系删除部分数据,而不是所有数据。