Mysql 批量插入数据之前判断重复的好的方案?

2016-01-07 09:22:48 +08:00
 tanteng

使用 MySQL 做统计,需要查询大量数据计算后重新组装各种数据入库,考虑到大数据量和性能问题,要批量插入数据库,而且可能会出现重复的情况,如何判断重复呢?

如果在入库前判断重复,需要每条数据都 select 一下判断,不重复的放到数组再一次批量插入,但是这个查询量也是很大的。或者建立联合唯一约束,但是如果其中一条数据插入失败,则整个插入操作都失败。

现在的做法是先不判断重复,入库后,再找出重复的删掉。。

有没有更好的办法呢?

6355 次点击
所在节点    MySQL
13 条回复
realpg
2016-01-07 09:26:05 +08:00
禁止重复的做唯一性约束
然后
insert ignore into
nightspirit
2016-01-07 09:42:42 +08:00
可以建立唯一索引,然后记录插入失败的记录
tanteng
2016-01-07 09:43:45 +08:00
@nightspirit 唯一索引可以批量插入数据吗,其中一条失败会不会全失败
est
2016-01-07 09:54:31 +08:00
最快速度导入 mysql 是

LOAD DATA INFILE 'xxx.csv' IGNORE INTO TABLE 就行了。
ETiV
2016-01-07 10:21:27 +08:00
如 ls ,最快的导入就是 load data infile

表引擎换成 myisam ,比 innodb 快 20 倍。
lyragosa
2016-01-07 10:24:59 +08:00
ON DUPLICATE KEY?
lixiaohan
2016-01-07 10:30:32 +08:00
做唯一性索引, insert into ignore 就这样了
500miles
2016-01-07 11:59:57 +08:00
如果重复数据 需要被替换更新掉.,

那么 replace into 或者 on duplicate key 是个好的选择..
zacard
2016-01-07 13:15:45 +08:00
mark
tanteng
2016-01-07 14:39:08 +08:00
@500miles 请问用 replace into 需要给字段设置什么吗?比如我对重复的定义是其中 A , B , C 三个字段值如果一样就是重复, replace into 认为什么样的数据是重复?
timsims
2016-01-07 15:40:27 +08:00
insert into ignore 不会进行任何的插入
on duplicate key 除了唯一 key, 其余字段会覆盖 , 自增的主键不会变化
replace into 同上,但自增的主键也会有变化(实际上是删了旧的行再插入)
toben
2016-01-07 19:29:43 +08:00
@tanteng 唯一主键
iyangyuan
2016-01-07 19:44:59 +08:00
缓存 id

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/248930

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX