84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
使用MySQL做统计,需要查询大量数据计算后重新组装各种数据入库,考虑到大数据量和性能问题,要批量插入数据库,而且可能会出现重复的情况,如何判断重复呢?
如果在入库前判断重复,需要每条数据都select一下判断,不重复的放到数组再一次批量插入,但是这个查询量也是很大的。或者建立联合唯一约束,但是如果其中一条数据插入失败,则整个插入操作都失败。
现在的做法是先不判断重复,入库后,再找出重复的删掉。。
有没有更好的办法呢?
2016-01-19号补充:重复的判断条件是某几个字段的值是否相同
闭关修行中......
可以试试 replace into 或者 Insert into ..... on duplicate key update
Insert into ..... on duplicate key update
参考:http://blog.csdn.net/mchdba/article/details/8647560http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
批量入库的时候建议使用mysql导入工具——mysqlimport,可以设置忽略重复数据。http://www.runoob.com/mysql/mysql-database-import.html
我觉得你先插入再删掉的方法不错。你说的重复是“主键重复”的数据吧?那么你要插入的必定是最新的数据。我会先删旧数据,假设主键是'uid',先开事务,再'delete ... where uid in (...)',然后插入新数据,提交关事务。如果还想优化,用'select ...where uid in ()' 一次查出已经有的数据,然后不插入那些重复数据。
建个临时表全插入 再insert
@好雨云 他说的replace into 或者 Insert into ..... on duplicate key update算是一种解决方案。
不过建议使用Insert into ..... on duplicate key update
当你数据量大的时候,效率是比replace高的,究其原因是因为replace插入数据时候需要额外维护主键索引。
可以试试 replace into 或者
Insert into ..... on duplicate key update
参考:
http://blog.csdn.net/mchdba/article/details/8647560
http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
批量入库的时候建议使用mysql导入工具——mysqlimport,可以设置忽略重复数据。
http://www.runoob.com/mysql/mysql-database-import.html
我觉得你先插入再删掉的方法不错。
你说的重复是“主键重复”的数据吧?那么你要插入的必定是最新的数据。我会先删旧数据,假设主键是'uid',先开事务,再'delete ... where uid in (...)',然后插入新数据,提交关事务。
如果还想优化,用'select ...where uid in ()' 一次查出已经有的数据,然后不插入那些重复数据。
建个临时表全插入 再insert
@好雨云 他说的replace into 或者 Insert into ..... on duplicate key update算是一种解决方案。
不过建议使用Insert into ..... on duplicate key update
当你数据量大的时候,效率是比replace高的,究其原因是因为replace插入数据时候需要额外维护主键索引。