SQL删除查询耗时太长,要从50万条记录中删除20k条记录

时间:2017-05-22 07:50:53

标签: mysql heidisql

在我的数据库中,我有 500,000条记录。我已应用查询来删除 20,000条记录

Heidi SQL显示该命令正在执行45分钟。

这是我的命令 -

DELETE FROM DIRECTINOUT_MSQL WHERE MACHINENO LIKE '%TEXAOUT%' AND DATASENT = 1 AND UPDATETIME = NULL AND DATE <= '2017/4/30';

请告知,将来如何避免这种情况,我现在该怎么办?我应该用一些条件解体这个查询并执行较小的查询吗?

我已导出我的数据库备份文件,其周围 47mb

请告知。

3 个答案:

答案 0 :(得分:1)

尝试索引方法。它将提高您的查询性能

数据库索引或仅索引有助于加快从表中检索数据的速度。当您从表中查询数据时,首先MySQL检查索引是否存在,然后MySQL使用索引来选择表的精确物理对应行,而不是扫描整个表。

https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html

答案 1 :(得分:0)

您使用myIsm或InnoDB的引擎是什么? 我猜你用的是mysql数据库, 在数据库上设置的隔离级别是什么? 选择这些数据需要多长时间?请注意,在某些情况下,限制会使您在几秒钟内完成查询,但只获得部分结果。

答案 2 :(得分:0)

我曾经遇到过这个问题。我用循环解决了它。 您必须首先使用快速选择编写查询以检查是否有要删除的记录:

SELECT COUNT(SOME_ID) FROM DIRECTINOUT_MSQL WHERE MACHINENO LIKE '%TEXAOUT%' AND DATASENT = 1 AND UPDATETIME = NULL AND DATE <= '2017/4/30' LIMIT 1

虽然此查询的计数为1,但请执行以下操作:

DELETE FROM DIRECTINOUT_MSQL WHERE MACHINENO LIKE '%TEXAOUT%' AND DATASENT = 1 AND UPDATETIME = NULL AND DATE <= '2017/4/30' LIMIT 1000

我只是随机选择了1000,但您必须查看服务器配置的DELETE语句的最快限制。