首页 >数据库 >mysql教程 >如何在没有主键的大型 SQLite 表中高效删除重复行?

如何在没有主键的大型 SQLite 表中高效删除重复行?

DDD
DDD原创
2025-01-05 13:20:41227浏览

How to Efficiently Delete Duplicate Rows in a Large SQLite Table Without a Primary Key?

优化 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn