我目前有删除重复的文件,但这个过程需要太长的时间,所以我想把它瘦下来,并通过可能的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"]);
如果cron不可能用这个,那么是的,一天一次就够了。 但对于删除过程来说,加载时间实在是太长了。
到底为什么,你要追着重复的内容去删除,而不是在tress.title上有一个唯一的约束,以防止重复的内容在第一时间被插入?
或者你可以让你的代码使用 INSERT ... ON DUPLICATE KEY UPDATE ...
或者你可以写一个插入前的触发器来实现这一点。
追逐重复似乎是一个比防止重复更糟糕的解决方案。