使用 MySQL 做统计,需要查询大量数据计算后重新组装各种数据入库,考虑到大数据量和性能问题,要批量插入数据库,而且可能会出现重复的情况,如何判断重复呢?
如果在入库前判断重复,需要每条数据都 select 一下判断,不重复的放到数组再一次批量插入,但是这个查询量也是很大的。或者建立联合唯一约束,但是如果其中一条数据插入失败,则整个插入操作都失败。
现在的做法是先不判断重复,入库后,再找出重复的删掉。。
有没有更好的办法呢?
1
realpg 2016-01-07 09:26:05 +08:00
禁止重复的做唯一性约束
然后 insert ignore into |
2
nightspirit 2016-01-07 09:42:42 +08:00 via iPhone
可以建立唯一索引,然后记录插入失败的记录
|
3
tanteng OP @nightspirit 唯一索引可以批量插入数据吗,其中一条失败会不会全失败
|
4
est 2016-01-07 09:54:31 +08:00
最快速度导入 mysql 是
LOAD DATA INFILE 'xxx.csv' IGNORE INTO TABLE 就行了。 |
5
ETiV 2016-01-07 10:21:27 +08:00 via iPhone
如 ls ,最快的导入就是 load data infile
表引擎换成 myisam ,比 innodb 快 20 倍。 |
6
lyragosa 2016-01-07 10:24:59 +08:00
ON DUPLICATE KEY?
|
7
lixiaohan 2016-01-07 10:30:32 +08:00
做唯一性索引, insert into ignore 就这样了
|
8
500miles 2016-01-07 11:59:57 +08:00
如果重复数据 需要被替换更新掉.,
那么 replace into 或者 on duplicate key 是个好的选择.. |
9
zacard 2016-01-07 13:15:45 +08:00
mark
|
10
tanteng OP @500miles 请问用 replace into 需要给字段设置什么吗?比如我对重复的定义是其中 A , B , C 三个字段值如果一样就是重复, replace into 认为什么样的数据是重复?
|
11
timsims 2016-01-07 15:40:27 +08:00
insert into ignore 不会进行任何的插入
on duplicate key 除了唯一 key, 其余字段会覆盖 , 自增的主键不会变化 replace into 同上,但自增的主键也会有变化(实际上是删了旧的行再插入) |
13
iyangyuan 2016-01-07 19:44:59 +08:00
缓存 id
|