在 PostgreSQL 中使用唯一约束从大表中高效删除重复项
由于标准 SQL DELETE
语句的耗时性质,向包含重复项的大型表(数百万行)添加唯一约束会带来重大挑战。 本文探讨了一种更有效的解决方案。
一种高效的方法利用 PostgreSQL 扩展和 USING
子句。考虑这个查询:
<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
值的行,删除具有较低值的行。
例如,要强制 email
表中 user_accounts
列的唯一性,保留最近创建的帐户(最高的 id
),查询将是:
<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>
USING
子句是这种 PostgreSQL 特定方法的效率的关键。 在处理海量数据集时,与传统DELETE
方法相比,它显着提高了性能。
以上是如何在 PostgreSQL 中有效地从具有唯一约束的大表中删除重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!