Merge Into 快速更新大量数据

达梦数据库merge into更新多个字段,插入特定字段的使用 这个示例问题,就是只介绍了一个字段更新时的情况,还只介绍了全字段更新的情况,这种情况算是比较特殊了,想更新多个字段,插入部分字段怎么写呢?查阅了一些资料,得到的结论是。有一点需要注意的,我用以下方式时候报错,所以还是能将表起别名就起个别名,用起来也方便。在达梦数据库的官方文档里有介绍merge into的用发,可以参考。这个示例里用到的语句是。 阅读详情

一、场景描述

接到几个数据修改的单子,需求是根据要求将给出的数据字段更新到表里边,数据量级第一次10万,第二次大约在20万左右,第三次300万。之前没有更新大量数据的经验,所以直接update。第一批5万条数据大约执行了4个小时,感觉等不下去了,看了一下执行计划,Cost 是10位数(当然,Cost 跟执行时长并无直接关系,只当作一个参考),如下图。

由执行计划可以看出,进行了两次全盘扫描,且提供数据的表中无任何索引。

二、SQL改进

1、添加索引

上文中提到提供数据的表中无任何索引,所以可以添加一个索引来缩短执行时长。在添加索引过后,Cost 直接降至9位数,如下图。

可以看出,一次执行了全表扫描和一次索引 Index Range Sacn。

2、Merge Into

Merge into 是 Oracle 9i 引入的功能,其语法如下:

MERGE INTO table_name alias1 
USING (table|view|sub_query) alias2
ON (join condition) 
WHEN MATCHED THEN 
    UPDATE table_name 
    SET col1 = col_val1, 
           col2 = col_val2 
WHEN NOT MATCHED THEN 
    INSERT (column_list) VALUES (column_values);

Oracle 中 Merge 语句原意是用来进行更新整张表使用的,是ETL工具比较常用的语法,重点是在Using上。Merge语法:在 alias2 中Select出来的数据,每一条都跟alias1进行 ON ( join condition )的比较,如果匹配,就进行更新的操作(Update),如果不匹配,就进行插入操作(Insert)。在一个同时存在Insert和Update语法的Merge语句中,总共Insert/Update的记录数,就是Using语句中alias2的记录数。

使用 Merge Into后查看执行计划:

可以看出使用Merge Into 确实可以快速更新。

3、第三次大概300w数据,其实前两次都涉及到Date类型字段的迁移或更新,此时如果直接to_char转换日期格式,可能会造成时间上的延长,可以再临时表中建一个同类型的字段,这是就不需要类型转换从而节省时间的开销。其次,如果有需要对目标字段加解密等操作,建议不要在执行语句时做,可以将数据迁移出后再进行加解密。再就是像几百万条数据,可以写个存储过程,提交 10w/次。

最后总结一下触发全表扫描的SQL关键词:

Select * from table

where 子句中使用 != 或 <> 操作符

没有在where 及 order by 涉及的列上建立索引

where 子句中对字段进行 null 值判断

在 where 子句中使用 or 来连接条件

前置百分号: select  custname from user where custname like ‘%abc%’

慎用 in 和 not in:如果是连续数值,可用 between 代替

where 子句中对字段进行表达式操作或函数操作

【数据库】Oracle数据表相关操作(CREATE & INSERT INTO & TRUNCATE & TRUNCATE & MERGE INTO)、JOB注意事项 偶尔有Oracle库的报表需求,每次隔久了就忘记一些小细节,所以把抓数据时常用的操作(CREATE & INSERT INTO & TRUNCATE & TRUNCATE & MERGE INTO)记录一下,便于以后翻看。(主要是针对我常用的,需要从已有数据表提取并大量插入新表的情况)... 阅读详情

相关推荐

Merge into的使用详解

Merge into写法,含两种,带实例说明

SQL之merge into 批量更新数据

Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。 可以想象出,需要使用Merge的场景比如: 数据同步 数据转换...

月亮哥的专栏 3662

data-merge:对大量数据进行合并处理,优化性能

dataMerge 对大量数据进行合并处理,优化性能。 主旨是对某一时间段里的数据进行合并,重复的记录进行去重,只取最新的记录。比如一秒钟来了1000条数据,其中有500条是重复的,那这一秒钟应该只返回500条结果。 两种模式 de-duplication 一种是合并去重模式,把某一时间段内的内容合并后进行去重再返回结果集 merge只作合并,只对时间段内的内容合并返回结果集 范例 let d1 = new DataMerge(); d1.init({ data:[], time:10000, mergeKey:['id'], // mode:'merge', mode:'de-duplication', callback:function(data,count,mergecount){ console.log(+new Da

经营活动中没有重大违法记录

merge into 目标表 a using 源表 b on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……) when matched then update set a.字段=b.字段 --目标表别称a和源表别称b都不要省略 when not matched then insert (a.字段1,a.字段2……)values(b.字段1,b.字段2……) --目标表别称a可省略,源表别称b不可省略 有一个表T,有两个字段a、b,我们想在表T中做I...

a1264716408的博客 1734

Pytorch的一小步,昇腾芯片的一大步

相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片!

机器学习-深度学习-图像处理-opencv-段子 5240

基于NXP BFU730F的宽带WiFi LNA设计:从原理到实测的完整指南

低噪声放大器(LNA)是无线通信接收链路中的关键器件,其性能直接决定了系统的接收灵敏度。LNA的核心原理是在放大微弱信号的同时,尽可能降低自身引入的噪声,并保持良好的线性度以应对强干扰。在宽带应用场景下,如覆盖2.4GHz至5.9GHz的现代WiFi系统,设计需在宽带匹配、噪声优化和增益平坦度之间取得精妙平衡。本文以NXP的BFU730F SiGe:C HBT晶体管为核心,深入解析一种采用电阻反馈和LC匹配网络的经典宽带LNA架构。该设计通过优化反馈网络,在宽达3.5GHz的频带内实现了优异的噪声系数(低至

weixin_33587161的博客 326

大批量数据如何短时间高效的进入数据库,jdbc的batch 以及orcale的mergo into

假定一种情境,当每天有大批量数据诸如百万条数据需要对数据库进行更新,其中一部分是数据库中原先没有的需要新增,其中一部分是数据库中原先有的需要更新操作,如果用遍历的方式去先判断每条数据在数据库中原本存在不存在,然后在决定是insert还是update效率会特别低,这时就需要用到oracle的mergo into语句,该操作会判断是新增还是更新并进行对应操作 mergo into语句如下:

biejiuyingshang的博客 679

四足机械臂避坑指南:从URDF配置到逆运动学控制的完整流程

本文为四足机械臂(Loco-Manipulation)系统开发提供了一份详实的实战避坑指南。文章深入剖析了从URDF模型配置、核心控制循环设计到逆运动学(IK)求解与奖励函数构建的完整流程,重点讲解了如何避免关节命名错误、惯性参数设置不当、IK求解不稳定等常见陷阱,并强调了利用collision_bbox等可视化工具进行高效调试的方法,旨在帮助工程师构建稳定、高效的四足机械臂控制系统。

weixin_42509507的博客 192

1小时搭建数据同步原型:Oracle MERGE INTO实战

源表:存储从旧系统导出的客户数据目标表:新系统的客户主表同步规则:新客户直接插入已存在客户更新联系方式以客户ID作为匹配键。

CrystalwaveStag的博客 654

PCIe链路训练Recovery状态机:从RcvrLock到链路稳定的关键路径

本文深入解析PCIe链路训练中的Recovery状态机,特别是RcvrLock状态的关键作用。从Block对齐、均衡预设值应用到状态转移条件,详细介绍了确保链路稳定的技术要点,并提供了高速率下的特殊处理方法和常见问题排查指南,帮助工程师解决PCIe链路不稳定问题。

weixin_28739079的博客 174

4 屏 + 8 摄像头一开,谁在悄悄拖慢你的座舱域控?

如果你觉得座舱卡顿:❌ 别第一反应怪 SoC❌ 别盲目堆算力。

weixin_43199439的博客 148

比传统INSERT/UPDATE快10倍!Oracle MERGE INTO效率揭秘

最近在优化公司数据同步流程时,发现Oracle的MERGE INTO语句比传统的先UPDATE再INSERT方式效率高出不少。为了验证这个发现,我做了一个完整的性能对比测试,结果确实令人惊喜。上快速体验这类数据库操作,它的在线编辑器和支持多种数据库的特性让性能测试变得很方便,一键部署功能也省去了搭建环境的麻烦。实际使用中我发现,即使是复杂的SQL调优,也能在这个平台上快速验证效果。资源消耗方面,MERGE INTO的CPU使用率降低了65%,生成的redo日志量减少了70%。10%的记录保持不变。

CyanWave34的博客 821

基于Python的军事装备信息爬虫实战:Scrapy+Playwright+智能反反爬技术

本文将详细介绍如何使用Python构建一个高效的军事装备信息爬虫系统。我们将从基础的HTTP请求开始,逐步深入到使用Scrapy框架、Playwright浏览器自动化以及最新的反反爬技术。文章包含完整的代码实现、性能优化策略以及数据处理方案,旨在为读者提供一个全面的军事信息爬取解决方案。关键词:Python爬虫、军事装备、Scrapy、Playwright、反反爬。

2201_76125261的博客 1155

ORACLE快速合并更新数据——MERGE INTO

传统update写法 update b_pharmacy_sku vs set vs.supply_price = (select t.supply_price from b_pharmacy_sku_bak t where t.id = vs.id) where  exists(select 1 from b_pharmacy_sku_bak t where t.id = vs.id);

敲码农的小代码   ; 3899

【华为OD】华为性格测试(综合测试)高分策略

1、性格测试非常重要,是一次否决制,18 个月有效期,所以态度一定要认真对待,不要随便乱选;2、做题原则:正向原则,积极乐观向上3、时间为 25-30 分钟,会频繁出现重复选项重复出现的题目注意一致性。

笑着的程序员的博客 3万+

计算机视觉教程2-3:图解双线性插值算法&最近邻插值算法

提出此算法的背景是基于图片的缩放,在图片缩放的过程中,实质上就是将原图像像素矩阵像素值,填到目标图像像素矩阵中,目标图像像素矩阵可能比原图像像素矩阵大(图片放大),也可能小(图片缩小)。我们假设图片的宽(WidthWidthWidth)和高(HeightHeightHeight)是按同比例缩放的,那么 srcXsrcWidth=dstXdstWidth\frac{srcX}{srcWidth}= \frac{dstX}{dstWidth}srcWidthsrcX​=dstWidthdstX​ ...

FRIGIDWINTER的博客 7282

用快马 AI 一键生成 Oracle MERGE INTO 数据同步应用,效率提升 200%!

这种"AI生成+人工优化"的模式,特别适合快速迭代的业务场景。最近在做一个数据迁移项目,需要频繁同步两个Oracle数据库表的数据。更省心的是部署环节。传统方式要折腾服务器配置,在快马直接点击部署按钮,系统自动打包成可访问的Web服务,还能生成调用示例。:以前同步数据要写一堆IF-ELSE,先SELECT检查是否存在记录,再决定UPDATE还是INSERT。:单条语句完成"有则更新,无则插入"的操作,原子性执行避免竞态条件。的AI辅助开发,记得重点检查ON条件和字段映射,这两个地方最容易出问题。

CrystalwaveStag的博客 805

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

MERGE INTO vs 传统UPDATE/INSERT:性能对比测试

通过这次性能对比测试,验证了MERGE INTO在数据合并操作中的显著优势。它不仅性能更好,还能简化代码、减少错误。对于需要频繁处理数据合并的应用,强烈建议采用这种方式。如果你想快速体验数据库操作优化,可以试试InsCode(快马)平台,它提供了便捷的数据库操作环境,无需复杂配置就能运行SQL测试。我在测试过程中发现它的响应速度很快,特别是处理大数据量时依然保持流畅,对于性能对比这类实验非常友好。

GoldenleafLynx28的博客 487

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

电商库存系统:MERGE INTO实战案例解析

大幅简化代码逻辑,减少业务层复杂度提高性能,减少数据库往返次数保证操作的原子性,避免并发问题适用于各种"存在更新,不存在插入"的场景如果你也在做类似的数据同步工作,强烈建议尝试MERGE INTO,它可能会让你的代码变得更简洁高效。最后分享一个实用小技巧:在InsCode(快马)平台上可以快速搭建这样的演示系统,它的在线编辑器和一键部署功能让开发过程变得特别顺畅。我实际使用时发现,从设计到上线整个流程非常快捷,特别适合做技术验证和演示。

CrystalwaveStag的博客 606

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SQL新手必学:MERGE INTO入门指南

比如我们要同步两个表的数据,传统做法得先查询再判断,而MERGE INTO一条语句就能搞定。实际使用时,建议先从小例子开始,比如先用两个简单的测试表练习基础操作,等熟悉了再应用到真实业务场景。记住,MERGE INTO虽然强大,但一定要先确保理解了它的执行逻辑,否则可能会意外修改大量数据。这个语法看起来有点复杂,但其实掌握了核心逻辑后,会发现它比分开写INSERT和UPDATE方便多了。我试了下他们的示例项目,从选择表结构到生成完整语句,整个过程很流畅。会员积分累计:老会员更新积分,新会员创建记录。

CrystalwaveEagle34的博客 384

电商库存同步实战:Oracle MERGE INTO典型应用

电商库存同步主要面临两个问题:一是需要根据销售记录实时更新库存数量,二是当库存低于阈值时要标记预警状态。每天都会有大量的商品销售数据需要同步到库存表中,同时还需要根据库存情况触发预警。通过这个案例可以看出,Oracle的MERGE INTO在批量数据同步场景中非常高效。特别是电商这种需要频繁更新数据的业务,合理使用MERGE可以大幅提升系统性能。上尝试了类似的功能实现,发现它的一键部署特别方便,不用自己搭建Oracle环境就能测试SQL效果。销售记录表每天会产生大量数据,而库存表需要实时反映最新库存情况。

AgatePanther34的博客 904

更新数据库牛逼到爆的MERGE INTO

今天更新数据库的时候发现使用update set语句更新一百万条数据基本上不可能,就算时间允许,公司配的那台i3 5代处理器的thinkpad估计也不会同意的,只好咨询了下部门的部花冯老师,果不其然,只有你不问的,没有冯老师不知道的。 冯老师墙裂推荐的MERGE INTO这个语句,更新速度秒杀我涨工资的速度,很是意外,具体使用如下: MERGE INTO 目标表 A USIN...

Vllen的博客 1012

Merge Into vs 传统CRUD:效率对比实验

特别是处理百万级数据时,平台自动扩展计算资源的功能帮了大忙,不用自己折腾服务器配置。建议有类似需求的同学可以试试这个实验方案,完整代码和测试数据我都放在平台项目里了。:记录每次操作的执行时间、CPU/内存占用等指标,并自动生成可视化对比图表。为了弄清楚哪种方式更高效,我决定做个对比实验,用数据说话。:自动创建不同规模的测试数据集,模拟真实业务场景下的数据分布。在小数据量时(<1万条),两种方式差异不大,传统CRUD甚至略微快2-3%(因为。最近在工作中遇到了大量数据合并的需求,发现团队里有人用。

SunstoneLion34的博客 416

电商库存系统实战:ORACLE MERGE INTO的典型应用

这些数据最初分散在多个系统里,需要定期同步到主库存表中。传统做法是先查询再判断插入或更新,效率很低,而MERGE INTO完美解决了这个问题。我们建立了两个核心表:商品主表存储商品基础信息和当前库存,每日流水表记录当天的所有库存变动。这个功能在我们团队最近开发的库存管理系统里发挥了巨大作用,特别适合处理每天大量的库存数据同步需求。上线后,每日库存同步时间从原来的47分钟缩短到8分钟,特别是在大促期间,系统稳定性显著提升。,它的在线数据库环境可以直接运行这些SQL脚本,还能一键部署完整的演示项目。

BlackStone33的博客 402

【数据写入】达梦数据库(dm8)merge into写入时序数据速度慢的问题处理

使用临时表优化后,数据插入效率提升数倍左右。

浮生九记 497

Oracle快速插入数据append

Oracle快速插入数据append 1:用merge into 进行匹配更新和插入, 2: 开启并行,提高速度 3: 如果可以的话加NOLOGING 不写入日志 4:如果数据有规律的话,分批次执行 1.使用marge快速插入; MERGE /*+ append */    INTO A d USING (select * B where ...) f     ON (d.a

sysmedia的博客 1388
上一篇: Java‘volatile conception
下一篇: 乐观锁:CAS
West Money
博客等级 码龄9年 7粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值