Foxtable(狐表)用户栏目专家坐堂 → [求助] 大批量数据新增/更新到数据库


  共有124人关注过本帖树形打印复制链接

主题:[求助] 大批量数据新增/更新到数据库

帅哥哟,离线,有人找我吗?
252476276
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:29 积分:311 威望:0 精华:0 注册:2022/9/13 10:03:00
[求助] 大批量数据新增/更新到数据库  发帖心情 Post By:2024/5/8 10:36:00 [只看该作者]

求教:

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

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

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

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

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106697 积分:542680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:29 积分:311 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2024/5/8 11:23:00 [只看该作者]

第1种方法,不检查重复性
第2种方法,跟我用的类似,执行一万次与合起来500个发送一次,速度都差不多

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106697 积分:542680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/5/8 11:32:00 [只看该作者]

不是2种方法。2楼是只是一种方法的2个步骤,合起来使用。

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

 回到顶部
帅哥哟,离线,有人找我吗?
252476276
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:29 积分:311 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2024/5/8 13:06:00 [只看该作者]

实际上不能算是新增数据了,都是更新, 不能批量操作,都是一条一条的执行。
所以第1条方法就用不上了。

 回到顶部
帅哥哟,离线,有人找我吗?
252476276
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:29 积分:311 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2024/5/8 13:15:00 [只看该作者]

懂了
[此贴子已经被作者于2024/5/8 13:20:27编辑过]

 回到顶部