查重、插入新数据性能

sym44 2018-04-24 10:32:59
有一个1000w行左右的表,每行大约100个字段。主键为OBJECT_ID。想要实现新数据插入时,判断是否主键已存在,如果存在,更新字段;如果不存在,插入新数据。使用Python Pandas Dataframe一行一行遍历,每天数据量大约在5000行左右。但是这样性能很堪忧,每分钟只能遍历50-60行(其他行数较少、字段简单的表,每分钟处理量在几百行,唯独这张表很大),各位大大有没有什么好的建议?谢谢了,附上代码。

begin tran
if exists (select * from A with (updlock, serializable) where [OBJECT_ID] = ?)
BEGIN
update A set
abc = ?,
zxy = ?
where [OBJECT_ID] = ?
END
ELSE
BEGIN
insert into A
(
[OBJECT_ID], abc, zxy
)
values
(?, ?, ?)
END
COMMIT tran
...全文
374 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-04-24
  • 打赏
  • 举报
回复
merge会导致表锁。 如果这个表使用得不多, 可以用 merge. 如果使用得多, 用 merge 还是有问题, 你自己得衡量一下。 你这个表 1000 万行, 100 个字段, 太庞大了, 横向和纵向都 应该分一下表, 要不然怎么弄都快不了多少。
卖水果的net 版主 2018-04-24
  • 打赏
  • 举报
回复
判断是否主键已存在,如果存在,更新字段;如果不存在,插入新数据。 使用 merge 语句,代码简洁、效率也是可以的。
二月十六 版主 2018-04-24
  • 打赏
  • 举报
回复
用MERGE 实现有则更新无则插入 的需求 https://blog.csdn.net/sinat_28984567/article/details/79861811

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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