优化 SQLite 数据库中的重复行删除
问题:
在 SQLite3 中遇到超过 3600 万行的海量表,你面临基于两列(hash 和 d)删除重复记录的挑战。但是,有一个问题:表中不存在主键列。为了寻求有效的解决方案,您询问解决此任务的最有效方法。
答案:
为了在没有主键的情况下有效消除重复行,每条记录都需要一个唯一的标识符。
解决方案:
利用 SQLite3 的特殊 rowid 列作为我们的唯一标识符。 rowid 列是一个整数,随着添加到表中的每个新行自动递增。使用 rowid,您可以为每个 (hash, d) 组合保留具有最低 rowid 值的记录。
SQL 查询:
实现以下 SQL 查询来实现您的目标:
DELETE FROM YourTable WHERE rowid NOT IN ( SELECT MIN(rowid) FROM YourTable GROUP BY hash, d )
此查询识别并消除具有重复 (hash, d) 组合的所有行,确保每个组合仅保留一个实例在表中。 MIN(rowid) 子查询确保对于重复记录,保留 rowid 值最低的记录。
以上是如何在没有主键的大型 SQLite 表中高效删除重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!