以文本方式查看主题 - 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编辑过]
|