数据导入是否重复的检查效率问题

chenge126 2019-03-19 09:55:02
有个物料表,每次导入Excel数据的时候,都要检查Excel中的所有数据是否在物料表中存在,如果存在则添加,如果不存在则不添加,这个处理的过程太蛋疼,没条去查数据库肯定不现实,全查放内存表处理也非常慢,数据量是excel的一千多条,物料表是二十万条,菜鸟无能跪求好的方案 感谢~!
...全文
781 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenge126 2019-03-22
  • 打赏
  • 举报
回复
感谢各位回复,受教良多
guizhoumen 2019-03-21
  • 打赏
  • 举报
回复
excle数据导入内存做一个集合,然后判断表中是否重复,有重复的就从集合中删除,最后筛选后的集合直接插入。
检测重复可以多结合多线程提高速度。
如果物料有id(数值型),设为索引,如果string类型,不要设置为索引,反而影响速度,这个本人亲自实践过。
还有一点查询时候用select id from不要用select * from会很大提高速度。
md5e 2019-03-20
  • 打赏
  • 举报
回复
直接将判断重复的字段设置为主键,只管插入,for{try{执行}}
还想懒够 2019-03-20
  • 打赏
  • 举报
回复
引用 9 楼 吉普赛的歌 的回复:
用 SqlBulkCopy 将 Excel 中的数据插入到一个中转表, 再将中转表中的数据整理, 需要的才插入到正式表。
是的,这是正解,先导到中间表,然后再用存储过程去过滤,效率要高很多
chenge126 2019-03-20
  • 打赏
  • 举报
回复
引用 16 楼 以专业开发人员为伍 的回复:
[quote=引用 13 楼 md5e 的回复:]
直接将判断重复的字段设置为主键,只管插入,for{try{执行}}


物料表,本来就应该以物料编码为主键。至于其它字段(属性)作为判断依据,那么不是设置“主键”,而是设置普通的索引。[/quote]

受教~!感谢回复
chenge126 2019-03-20
  • 打赏
  • 举报
回复
引用 13 楼 md5e 的回复:
直接将判断重复的字段设置为主键,只管插入,for{try{执行}}

办法可以,但是需求是看是否存在,然后在另外的表中保存 感谢回复
  • 打赏
  • 举报
回复
引用 13 楼 md5e 的回复:
直接将判断重复的字段设置为主键,只管插入,for{try{执行}}
物料表,本来就应该以物料编码为主键。至于其它字段(属性)作为判断依据,那么不是设置“主键”,而是设置普通的索引。
  • 打赏
  • 举报
回复
才1千多条数据要处理,不应该慢。
  • 打赏
  • 举报
回复
引用 13 楼 md5e 的回复:
直接将判断重复的字段设置为主键,只管插入,for{try{执行}}


这个暴力 我喜欢,这哥们得意思设置联合主键,如果已经存在一个,那你判断重复得那个字段也设置主键,反正主键不能重复

直接往里面插,报错就抛出,继续执行下一条。
PS:最好把重复得整理出来得到一个集合,这样你知道哪些是重复得,当然如果你需要得话
正怒月神 版主 2019-03-19
  • 打赏
  • 举报
回复
我没有实际测试过速度, 不过感觉join的速度应该会比你逐条比对要快。
正怒月神 版主 2019-03-19
  • 打赏
  • 举报
回复
先把excel的数据放到数据库的临时表。 然后用物料表和临时表join一下,就知道哪些是存在的了。
chenge126 2019-03-19
  • 打赏
  • 举报
回复
引用 5 楼 水边2 的回复:
从20万条里,人工查找1000条,肯定是效率低下的,
但是如果是用程序处理,这个操作最多分钟级,
前提是你 使用主键,或者有索引的字段,进行重复检查。


导入数据从excel中来,保证导入数据中的每一条数据的物料代码必须在库中的物料表中存在,然后导入库中其他表保存,我目前是全查所有物料表的代码字段,然后到程序中的内存表来进行循环对比操作,目前还能满足需求,分钟级没错,这方面也没过多经验,就看看还有没有其他的方案。

主键的使用我目前没想到如何使用,在物料代码列添加索引来进行查询的话,如何能做到一次连接完成所有的匹配,比较疑惑

感谢回复~!
游北亮 2019-03-19
  • 打赏
  • 举报
回复
从20万条里,人工查找1000条,肯定是效率低下的, 但是如果是用程序处理,这个操作最多分钟级, 前提是你 使用主键,或者有索引的字段,进行重复检查。
chenge126 2019-03-19
  • 打赏
  • 举报
回复
引用 3 楼 wanghui0380 的回复:
你不会过滤我们也没办法

ps:其实你考虑根本就是一件多余的事情,1000多条而已。如果1000条数据查询,你认为是严重性能问题,因为这1000条查询造成了你的程序运行底下,那我的建议是“以后看博客园的文章的时候,请关注一下写作时间,如果是10年前那波北大青鸟时代的文章,直接略过别看”

1000多条语句可以忽略不计,id是主键是索引,1000条条查询主键存在不得语句,压根不会造成什么影响


谢谢~!
wanghui0380 2019-03-19
  • 打赏
  • 举报
回复
你不会过滤我们也没办法

ps:其实你考虑根本就是一件多余的事情,1000多条而已。如果1000条数据查询,你认为是严重性能问题,因为这1000条查询造成了你的程序运行底下,那我的建议是“以后看博客园的文章的时候,请关注一下写作时间,如果是10年前那波北大青鸟时代的文章,直接略过别看”

1000多条语句可以忽略不计,id是主键是索引,1000条条查询主键存在不得语句,压根不会造成什么影响
chenge126 2019-03-19
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:
那就预先过滤呗。


如何预先过滤··大哥求详细些
wanghui0380 2019-03-19
  • 打赏
  • 举报
回复
那就预先过滤呗。
chenge126 2019-03-19
  • 打赏
  • 举报
回复
引用 9 楼 吉普赛的歌 的回复:
用 SqlBulkCopy 将 Excel 中的数据插入到一个中转表, 再将中转表中的数据整理, 需要的才插入到正式表。


感谢回复,我试试
chenge126 2019-03-19
  • 打赏
  • 举报
回复
引用 8 楼 正怒月神 的回复:
我没有实际测试过速度,
不过感觉join的速度应该会比你逐条比对要快。


感谢回复,我试一下
吉普赛的歌 2019-03-19
  • 打赏
  • 举报
回复
用 SqlBulkCopy 将 Excel 中的数据插入到一个中转表, 再将中转表中的数据整理, 需要的才插入到正式表。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧