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