84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
使用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插入数据时候需要额外维护主键索引。