使用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插入資料時候需要額外維護主鍵索引。