2012-01-03 83 views
0

我有一个删除查询,从表中删除大量的数据。查询看起来是这样的提高删除查询的速度,删除大量数据?

While loop 

DELETE FROM table_name WHERE id=12345; 

End loop 

该查询获取数据1000个。

该循环是巨大的以及被查询删除的数据也是非常巨大的。结果系统变得非常慢。我需要一种方法来优化它。

注:存储引擎InnoDB的

感谢

+0

整个循环是否在事务中运行?可重复读取隔离级别的长事务可能会损害性能,因为MySQL必须不断读取回滚日志以获取数据。 – 2012-01-04 21:45:21

回答

0

该回复基于这样的假设,即循环是不负责的缓慢的过程。

有几种方法可以提高DELETE-状态,有些方法比其他方法更实用。首先,你必须找出什么能够减慢查询的速度,例如许多索引,很多数据行,可能是一个缓慢的硬件 - 或者只是连接到服务器的连接不良。

一种方法是使用QUICK-选项,它在索引文件中以不同的方式处理删除操作。请查看MySQL-manual中的详细信息。

另一种方法是:

  1. 复制你的表,
  2. 删除你的数据在复制
  3. 删除原始表,
  4. 处理过的副本重命名为原文件名。

您将删除与工作表分开。如果我们在这里讨论的表在很多流量下,或者使用外键等,这个ofc不应该完成。

+0

循环或其他任何因素都不会对缓慢的进程负责。删除查询速度很慢,因为它会'删除'大量数据(数据以1000为单位)。 QUICK是否适用于INNOdb?关于你提到的另外一种方式,如果表格中包含一些条目并且我们试图删除其中的几个1000,它会起作用吗? – Dora 2012-01-03 08:48:09

+0

快速在INNOdb工作,也。不知道你的表格结构如何以及应用程序如何工作,我无法确定我的第二种方法会如何影响你的程序。 – Bjoern 2012-01-03 09:02:43