从大型 SQL 表中高效删除重复行
向大型表(数百万行)添加唯一约束需要仔细处理重复条目。 使用标准 SQL 查询直接删除重复项可能会非常慢且占用资源。
一种简单的方法包括备份表,添加唯一约束,然后从备份恢复表。这可确保仅保留唯一的行。
然而,更精细的方法使用简洁的 SQL 查询来优化删除过程:
<code class="language-sql">DELETE FROM table USING table AS alias WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND table.max_field < alias.max_field;</code>
此查询通过比较基于 field1
和 field2
的行来有效地删除重复项。 它保留具有最高 max_field
值的行,有效地消除了较低值的重复项。 例如:
<code class="language-sql">DELETE FROM user_accounts USING user_accounts AS ua2 WHERE user_accounts.email = ua2.email AND user_accounts.id < ua2.id;</code>
此示例删除重复的电子邮件地址,保留具有最高 id
的帐户(可能是最近创建的)。
重要提示: USING
子句是 PostgreSQL 特有的功能,它通过启用直接行比较来显着提高查询效率。 其他数据库系统可能需要替代方法。
以上是如何有效地从大型 SQL 表中删除重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!