以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 大批量数据新增/更新到数据库  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=191757)

--  作者:252476276
--  发布时间:2024/5/8 10:36:00
--  [求助] 大批量数据新增/更新到数据库
求教:

页面上有1万+的数据量,有几个主键值,需要新增到数据库表中,需要防止主键重复。

应该如何写代码,才能速度很快。

        现在用的是每一条写一个sql语句判断表中是否存在, 如果存在就更新,不存在就新增

与数据库执行1万次语句,需要1.5分钟。 如何优化?

--  作者:有点蓝
--  发布时间:2024/5/8 10:53:00
--  
要快,需要添加一个辅助的东西。

1、在数据库里建一个同结构的新表,如果是SqlServer,参考这种方式批量把数据导入这个新表:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=147288
2、然后使用sql批量处理

已有数据进行关联更新,类似:
update a set a.列1=b.列1,a.列2=b.列2,.... from 数据库原表 as a  inner join 同结构的新表 as b where a.主键1=b.主键1 and a.主键2=b.主键2 

新数据进行关联插入,类似:
insert into 数据库原表(列1,列2,....) select 列1,列2,.... from 同结构的新表 as b where not exists ( select 主键1 from 数据库原表 as a where a.主键1=b.主键1 and a.主键2=b.主键2 )

--  作者:252476276
--  发布时间:2024/5/8 11:23:00
--  
第1种方法,不检查重复性
第2种方法,跟我用的类似,执行一万次与合起来500个发送一次,速度都差不多

--  作者:有点蓝
--  发布时间:2024/5/8 11:32:00
--  
不是2种方法。2楼是只是一种方法的2个步骤,合起来使用。

如果使用sqlbuck导数据,1W行不应该超过1秒,超过了肯定是用法不对

--  作者:252476276
--  发布时间:2024/5/8 13:06:00
--  
实际上不能算是新增数据了,都是更新, 不能批量操作,都是一条一条的执行。
所以第1条方法就用不上了。

--  作者:252476276
--  发布时间:2024/5/8 13:15:00
--  
懂了
[此贴子已经被作者于2024/5/8 13:20:27编辑过]