MYSQL在过去10分钟内删除每个id、标题的重复行。

问题描述 投票:0回答:1

我目前有删除重复的文件,但这个过程需要太长的时间,所以我想把它瘦下来,并通过可能的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分钟才能完成。是希望我可以添加日期时间,每5分钟左右检查过去10分钟。

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"]);
mysql duplicates rows
1个回答
0
投票

如果cron不可能用这个,那么是的,一天一次就够了。 但对于删除过程来说,加载时间实在是太长了。


0
投票

到底为什么,你要追着重复的内容去删除,而不是在tress.title上有一个唯一的约束,以防止重复的内容在第一时间被插入?

或者你可以让你的代码使用 INSERT ... ON DUPLICATE KEY UPDATE ...

或者你可以写一个插入前的触发器来实现这一点。

追逐重复似乎是一个比防止重复更糟糕的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.