MYSQL Удаление повторяющихся строк по идентификатору, заголовку в течение последних 10 минут - PullRequest
1 голос
/ 09 мая 2020

В настоящее время у меня есть удаление дубликатов, но процесс занимает слишком много времени, поэтому я пытаюсь уменьшить его и предпочитаю периодически проверять наличие новых дубликатов, возможно, позже с помощью задания cron или превратить его в сценарий php. ID - это первичный ключ. Вот что у меня есть на данный момент.

Это проверяет наличие дубликатов и работает хорошо.

SELECT title, COUNT(title) 
FROM `ttrss_entries` 
WHERE date(date_entered) >= NOW() - INTERVAL 10 MINUTE 
GROUP BY title 
HAVING COUNT(title) > 1

Удаление, которое удаляет дубликаты, но занимает около 30 минут. Надеялся, что смогу добавить дату и время, чтобы проверять последние 10 минут каждые 5 минут или около того.

DELETE n1 
FROM `ttrss_entries` n1, `ttrss_entries` n2 
WHERE n1.id > n2.id AND n1.title= n2.title


$usth = $pdo->prepare(
                    "INSERT INTO ttrss_entries
                        (title,
                        guid,
                        link,
                        updated,
                        content,
                        content_hash,
                        no_orig_date,
                        date_updated,
                        date_entered,
                        comments,
                        num_comments,
                        plugin_data,
                        lang,
                        author)
                    VALUES
                        (?, ?, ?, ?, ?, ?,
                        false,
                        NOW(),
                        ?, ?, ?, ?, ?, ?)");

                    $usth->execute([$entry_title,
                        $entry_guid_hashed,
                        $entry_link,
                        $entry_timestamp_fmt,
                        "$entry_content",
                        $entry_current_hash,
                        $date_feed_processed,
                        $entry_comments,
                        (int)$num_comments,
                        $entry_plugin_data,
                        "$entry_language",
                        "$entry_author"]);

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Почему именно вы преследуете дубликаты для удаления вместо того, чтобы иметь уникальное ограничение на tress.title, которое предотвращает вставку дубликатов в первую очередь?

Или вы можете использовать свой код INSERT ... ON DUPLICATE KEY UPDATE ...

Или вы можете написать для этого триггер перед вставкой.

Погоня за дубликатами кажется гораздо худшим решением, чем предотвращая их.

0 голосов
/ 09 мая 2020

, если cron с этим невозможен, тогда будет достаточно одного раза в день. Но время загрузки слишком велико для процесса удаления.

...