在我的数据库中,我有 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
请告知。
答案 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语句的最快限制。