MySQL удалить дубликаты строк в больших данных - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть запрос на удаление 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 строк и скоро будет 100 строк.и когда я работаю, этот запрос будет много времени или, возможно, не будет работать.

Поэтому я хочу добавить задания cron и хочу обрабатывать этот запрос каждые 1 час и запрашивать только 1 час до добавления строк,

Как добавить эту функцию в мой запрос?

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Прекратите то, что вы делаете!Измените схему на предотвращать дублирование строк. Тогда избавьтесь от дупла.Только затем продолжают получать данные.

Какой процент в таблице составляет dups?Если это большой процент, то

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 столбца, он будет более грязным.

Если это маленький процент, тогда некоторые грязные DELETE будут работать быстрее.

0 голосов
/ 08 февраля 2019

Вы можете использовать события 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 Расписание событий каждые 5 минут

Надеюсь, это поможет вам завершить ваш подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...