我有mysql删除重复行的查询。
DELETE DupRows.*
FROM myData AS DupRows
INNER JOIN (
SELECT MIN(ID) AS minId, ondate, symbol
FROM myData
GROUP BY ondate, symbol
HAVING COUNT(*) > 1
) AS SaveRows ON SaveRows.ondate = DupRows.ondate AND SaveRows.symbol = DupRows.symbol
AND SaveRows.minId <> DupRows.ID;
但是myData表现在在行上将有500000,并且很快就会x 100行。当我工作时,此查询将花费很多时间,或者可能无法正常工作。
因此,我想添加cron作业,并且我想每1小时工作一次此查询,并且只想在adden行之前查询1小时。
如何在查询中添加此功能?
谢谢
答案 0 :(得分:1)
停止您正在做的事情!将架构更改为 prevent 重复行。 然后摆脱傻瓜。只有然后继续接收数据。
表中有百分之几是重复的?如果是大pct,则
CREATE TABLE new LIKE myData;
ALTER TABLE new ADD UNIQUE (ondate, symbol); -- Is this what you need?
INSERT IGNORE INTO new (id, ondate, symbol)
SELECT MIN(id), ondate, symbol FROM myData
GROUP BY ondate, symbol;
RENAME TABLE myData TO old,
new TO myData;
DROP TABLE old;
如果您的栏目多于3列,则更麻烦。
如果它是一个小pct,那么一些混乱的DELETE将更快地工作。
答案 1 :(得分:0)
您可以使用Mysql事件,该事件可以每隔一小时自动触发一次。对于您来说,它将像cron作业一样工作,您可以在其中执行删除查询。对于事件,您可以参考以下链接:
希望它可以帮助您最终确定方法。