使用的是PostgreSQL 在做大数据量(十万级)导入时,某些字段和数据库表里数据(千万级)重复的需要排除掉,把表数据查询出来用程序的方式判断去重效率很低,于是考虑用临时表。 先把新数据插入到临时表里,临时表结构和原始表一致。 用SQL的方式把不重复的数据DataA查询出来。 把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
。
全能工具箱 专业版 4.1.0 2.61 MB
下载
湘ICP备2022002427号-10 湘公网安备:43070202000427号
© 2013~2024 haote.com 好特网