1. 50 万笔新数据里可能有重复
2. 数据库原有记录 1000 万笔,新数据可能与原有记录重复
不插入(跳过)以上出现重复的新数据,怎么做最有效率?
2. 数据库原有记录 1000 万笔,新数据可能与原有记录重复
不插入(跳过)以上出现重复的新数据,怎么做最有效率?
1
optional Dec 11, 2020 via Android
加约束
进临时表 insert on conflict |
2
levelworm Dec 11, 2020
先全部导入到临时表,然后 merge 的时候去掉重复的,我是 Vertica 。
|
3
dreasky Dec 11, 2020
加 unique 索引,insert ignore ,性能就不知道了
|
4
jorneyr Dec 11, 2020 insert ignore,开启事务,每次 5000 笔提交,几分钟就跑完了
|
5
byte10 Dec 11, 2020
随便 搞下就行了。500W 都不是问题
|
6
taozywu Dec 11, 2020
1 )使用 sqlyog,navcat 很 easy 的
2 )或者在数据表结构增加 unique 索引 3 )。。。 |
7
Ho1iday Dec 11, 2020
replace into
|
8
LuciferGo Dec 11, 2020 oracle 的话目标表加个唯一索引,sqlldr 后,重复数据会进入到 bad 文件,也可以用无唯一性中间表导入后去重加载到结果表,MySQL 是 insert 后加个 ignore,就可以了
|
9
AmosAlbert Dec 11, 2020 via Android
先进 Redis
|
10
qiayue PRO 总共只有 50 万笔需要插入,还是每隔一段时间都会产生 50 万笔?
两种情况有两种完全不同的处理方式。 如果是后者,间隔时间是多久?每秒还是每分钟还是每小时? 场景不介绍清楚,没办法给出最合适的解决方案。 |
12
SlipStupig Dec 11, 2020
@Devin 将这十个字段生成一个 SHA256 的 hash,作为索引,很容易判断的啊
|
13
qiayue PRO 是的,按顺序拼接十个字段,记住中间要加入分隔符,然后算下 md5 值当做唯一键
|
14
kaiki Dec 11, 2020
加个索引呗
|
15
hejw19970413 Dec 11, 2020
先分类 、多加个字段 。 归并排序的思想
|
16
xmge Dec 11, 2020
replaceinto
|
17
lithbitren Dec 11, 2020
拼接哈希在内存里操作就得了,1000 万也没多少的,处理完数据再用唯一索引结构
|
18
xcstream Dec 11, 2020
布隆过滤器
|
20
autogen Dec 12, 2020
加 union index,直接 insert 就会跳过重复的数据
|
21
autogen Dec 12, 2020
50 万不多不少,1 分钟应该能导完
|
22
rb6221 Dec 12, 2020
50 万本身先去个重。我个人的话,先取 10 个字段里的第一个过滤遍,第二个再过滤一遍,然后剩下的 8 个字段做 hash 过滤一遍。这样做的原因是前两遍可以以最小的成本达到最大比例的过滤效果。当然这个前 n 遍可以根据你们字段复杂度来定。这整个步骤在临时表做
然后就是 50 万里面剩下的数据,再用 10 个字段做 hash,和主表过滤。完毕 |
23
flgn88 Dec 12, 2020 via iPhone
这数据不多,加个约束很简单,就像楼上说的,不过可能会花点时间。我之前整类似的上亿条的才叫慢...
|
24
wangbenjun5 Dec 12, 2020
建个索引就能解决的问题,如果追求性能,那就加个布隆过滤器呗
|
25
zjttfs Dec 12, 2020
十个字段拼接算出 md5 , 然后 md5 也存进去,md5 字段加唯一索引.
|