首页 > 教程 > PostgreSQL数据库临时表去重效率比较与优化策略

PostgreSQL数据库临时表去重效率比较与优化策略

时间:2024-08-17 | 来源: | 阅读:51

话题: T TG POS S 数据库 策略

使用的是PostgreSQL 在做大数据量(十万级)导入时,某些字段和数据库表里数据(千万级)重复的需要排除掉,把表数据查询出来用程序的方式判断去重效率很低,于是考虑用临时表。 先把新数据插入到临时表里,临时表结构和原始表一致。 用SQL的方式把不重复的数据DataA查询出来。 把DataA插入到原

最近在处理大数据量(十万级)导入时,发现某些字段和数据库表里的数据(千万级)重复,需要进行去重处理。由于用程序方式查询去重效率低下,因此考虑使用临时表来优化去重过程。

具体优化步骤如下:

  1. 首先将新数据插入临时表,其结构与原始表相同。
  2. 通过SQL查询不重复的数据DataA。
  3. 将DataA插入到原始表中。

鉴于不重复数据还需要进一步处理,若无需特殊处理,可直接使用 insert into select 语句将第2步的数据插入原始表,并清空临时表。

第2步有两种方式,一种是使用 not exists 查询方法,另一种是利用 left join 方式。

测试结果表明,当临时表数据量较少时, not exists 方式耗时相对较短,但随着数据量增加耗时逐渐增加。而 left join 方式在数据量较少时用时较长,但随着数据量增加变化不大。因此,总结出单表去重时,只要导入的数据量不是特别特别大(20w级以上),优先使用 not exists 做去重。

然而,当需要对两个表进行去重时,情况会有所不同。在这种情况下,测试结果显示对于数据量较少的临时表, not exists 方式用时相对较短,但随着数据量增加耗时急剧增加。而 left join 方式对于数据量较少时用时较长,但随着数据量增加变化不大。因此,当导入的数据在3w以下时,建议使用 not exists ;在3w以上时,建议使用 left join


湘ICP备2022002427号-10湘公网安备:43070202000427号
© 2013~2019 haote.com 好特网