mysql重复行在大数据中删除

时间:2019-02-08 07:49:36

标签: mysql bigdata delete-row

我有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小时。

  

如何在查询中添加此功能?

谢谢

2 个答案:

答案 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作业一样工作,您可以在其中执行删除查询。对于事件,您可以参考以下链接:

  1. https://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html
  2. http://www.mysqltutorial.org/mysql-triggers/working-mysql-scheduled-event/
  3. mysql Schedule Event every 5 minutes

希望它可以帮助您最终确定方法。