具体需求
数据库里存在100万条数据;
要导入10万条数据;
如果要导入的数据在数据表里存在,则终止数据导入;
疑问
如何在每条数据需要对比的情况下快速导入,同时导入失败进行数据回滚?
具体需求
数据库里存在100万条数据;
要导入10万条数据;
如果要导入的数据在数据表里存在,则终止数据导入;
疑问
如何在每条数据需要对比的情况下快速导入,同时导入失败进行数据回滚?
如果考虑事务效率必定不高
个人思路参考下:
1、先判断要插入的数据是否存在
select id from table where id in('k1,k2,k3');
2、不存在 拼sql 写入数据库
10w 数据 拼 1条sql,插入速度 2秒 以内解决
可以看下我之前写的一篇文章,优化一次插入20w数据3秒内完成
https://my.oschina.net/famous...
基于这个问题,后续在导入的时候又出现了比较大问题,数据导入缓慢,因此关于这个,我写了一篇文章:
https://segmentfault.com/a/11...
希望后续有人看到了之后,能做一定的参考。
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
假定目标表叫做 target(100万数据), 需要导入的表叫做 source(10万数据)。
本例很大的一部分时间消耗在于判断是否两张表中的记录一样,猜测楼主想要 所有字段都相同(除了id字段)才认定为是同一条记录。
给每条记录计算一个类Hash值,可以存在target和source新建的字段中(hashValue), 计算量是 110万。
然后使用以下语句导入数据