mysql - MYSQL 在过去 10 分钟内删除每个 id、标题的重复行
问题描述
我目前有它删除重复项,但该过程需要很长时间,所以我试图精简它,而是让它通过以后可能的 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"]);
解决方案
为什么,确切地说,您要删除重复项而不是对 tres.title 设置唯一约束以防止重复项首先被插入?
或者你可以让你的代码使用INSERT ... ON DUPLICATE KEY UPDATE ...
或者您可以编写一个插入前触发器来执行此操作。
追逐重复似乎比阻止它们更糟糕的解决方案。
推荐阅读
- html - 在元素上指定尺寸并以 A4 纸格式显示页面
- sql - 如果外键不存在,则将该字段设置为 NULL
- c++ - 如何创建具有唯一名称的文件?
- java - 如何在 Javers 中更改 commitMetadata 中的作者字段
- spring - 测试休息端点 - Camel 3 + Spring Boot
- javascript - 如何将带有 npm 'docx' 包的图像添加到 word 文档?
- azure-cosmosdb - CosmosClient 与 DocumentClient
- python - 我必须对以块形式读取的不同大小的数据帧执行集合并集并设置差异
- html - 将嵌入视频与页面中心对齐
- android - 从 json 数组放置和排序适配器