news 2026/5/26 21:58:18

巧用rowid批量操作数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
巧用rowid批量操作数据

1、rowid简介

索引组织表:有且仅有一个聚簇索引键,数据按照聚簇索引键排序,所以数据是有序的,插入也是有序的。项目中一般情况下主键是非聚集索引,因此rowid是有序且是聚集索引,因此有些大表dml操作可以借用rowid去批量做来提升性能。

2、案例

项目中有些表经常查询,并且已增量很多数据,需要对比过去时间的数据进行归档,利用rowid可以加快数据归档的速度

2.1 测试数据准备

create table base1(idvarchar2(20)primary key,project_idvarchar2(20),ptypevarchar2(20),dflag int,ctime timestamp)partition bylist(ptype)(partition p_1values('1'),partition p_2values('2'),partition p_3values('3'),partition p_4values('4'),partition p_5values('5'),partition p_6values('6'),partition p_7values('7'),partition p_8values('8'),partition p_9values('9'));insert into base1 select'A'||level,'A'||to_char(round(dbms_random.value(1,10000),0)),to_char(round(dbms_random.value(1,9),0)),round(dbms_random.value(1,1),0),sysdate-round(dbms_random.value(1,360),0)from dual connect by level<=1000000;commit;insert into base1 select'A'||level+1000000,'A'||to_char(round(dbms_random.value(1,10000),0)),to_char(round(dbms_random.value(1,9),0)),round(dbms_random.value(1,1),0),sysdate-round(dbms_random.value(1,360),0)from dual connect by level<=1000000;commit;insert into base1 select'A'||level+2000000,'A'||to_char(round(dbms_random.value(1,10000),0)),to_char(round(dbms_random.value(1,9),0)),round(dbms_random.value(1,1),0),sysdate-round(dbms_random.value(1,360),0)from dual connect by level<=1000000;commit;备份表 create table BAK_base1(idvarchar2(20)primary key,project_idvarchar2(20),ptypevarchar2(20),dflag int,ctime timestamp)partition bylist(ptype)(partition p_1values('1'),partition p_2values('2'),partition p_3values('3'),partition p_4values('4'),partition p_5values('5'),partition p_6values('6'),partition p_7values('7'),partition p_8values('8'),partition p_9values('9'));create table BAK_base2(idvarchar2(20)primary key,project_idvarchar2(20),ptypevarchar2(20),dflag int,ctime timestamp)partition bylist(ptype)(partition p_1values('1'),partition p_2values('2'),partition p_3values('3'),partition p_4values('4'),partition p_5values('5'),partition p_6values('6'),partition p_7values('7'),partition p_8values('8'),partition p_9values('9'));

2.2 使用rowid方式/直接插入方式性能对比

将小于2026-01-01的数据插入新的备份表中。

2.2.1 Rowid方式
declare v_sqlvarchar(2000);v_pageno bigint;v_operate_num_max bigint;v_operate_num_min bigint;v_size bigint;cursor cur is select partition_name from dba_tab_partitions where table_name='BASE1';BEGINv_pageno:= 100000;-- 10万条数据循环一次 DBMS_OUTPUT.PUT_LINE(v_pageno);for c in cur loop execute immediate'select SF_GET_REAL_ROWID(max(rowid)), SF_GET_REAL_ROWID(min(rowid)) from BASE1_'||c.partition_name into v_operate_num_max,v_operate_num_min;v_size:=ceil((v_operate_num_max - v_operate_num_min)/(v_pageno-1))+1;for i in 1..v_size loopv_sql:='insert into bak_base1 select * from base1_'||c.partition_name||' where ctime<to_date(''2026-01-01'',''yyyy-mm-dd'') and rowid >= '||v_operate_num_min+(i-1)*v_pageno||' and rowid < '||v_operate_num_min+i*v_pageno;execute immediate v_sql;commit;end loop;end loop;END;执行时间: 执行成功,执行耗时47秒 532毫秒.执行号:4545 100000 影响了0条记录 1条语句执行成功
2.2.2 直接插入
create index IDX_DM_BASE1 onBASE1(CTIME)global;insert into bak_base2 select * from base1 where ctime<to_date('2026-01-01','yyyy-mm-dd');commit;[执行语句1]:insert into bak_base2 select * from base1 where ctime<to_date('2026-01-01','yyyy-mm-dd');执行成功,执行耗时9分 2秒 93毫秒.执行号:4633 影响了2,745,322条记录

对比,rowid方式完胜

3、小结

(1)rowid是聚集索引,通过rowid方式获取数据批量操作可以提升性能。目前也在实际项目中使用。
(2)一次性操作大量数据,也会产生很多undo记录,此时发生宕机,重启就要重做redo,可能要回滚很久。因此化整为零,并且每次用到rowid的聚集索引特性,能够快速达到目的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 19:07:39

Hunyuan-MT-7B多场景落地:新闻编译、合同审阅、学术论文润色应用

Hunyuan-MT-7B多场景落地&#xff1a;新闻编译、合同审阅、学术论文润色应用 1. 为什么需要一款真正好用的翻译大模型&#xff1f; 你有没有遇到过这些情况&#xff1a; 翻译一篇英文新闻稿&#xff0c;机器翻译结果生硬拗口&#xff0c;还得逐句重写&#xff1b;审阅一份中…

作者头像 李华
网站建设 2026/5/23 2:57:20

YOLOv12-L大模型训练实测,显存优化真香

YOLOv12-L大模型训练实测&#xff0c;显存优化真香 在目标检测工程实践中&#xff0c;一个长期被默认接受的“常识”正在被悄然打破&#xff1a;大模型高显存难训练。当团队拿到 YOLOv12-L 这个参数量达 26.5M、标称 mAP 53.8 的旗舰级模型时&#xff0c;第一反应往往是——“…

作者头像 李华
网站建设 2026/5/21 23:30:21

游戏角色设计提速:BEYOND REALITY Z-Image角色原型快速生成方案

角色设计提速&#xff1a;BEYOND REALITY Z-Image角色原型快速生成方案 1. 为什么游戏角色原型设计总在“反复修改”中消耗创意&#xff1f; 你是否经历过这样的场景&#xff1a;美术总监凌晨三点发来消息&#xff1a;“主角形象再调整下&#xff0c;皮肤质感要更真实&#x…

作者头像 李华
网站建设 2026/5/24 18:42:04

想修图不用求人!这个AI工具让你自己动手秒变专家

想修图不用求人&#xff01;这个AI工具让你自己动手秒变专家 你是不是也遇到过这些场景&#xff1a; 一张精心拍摄的旅行照&#xff0c;却被路人闯入画面&#xff1b; 电商主图上突兀的水印怎么都去不干净&#xff1b; 老照片边缘泛黄破损&#xff0c;想修复又怕越修越假&…

作者头像 李华
网站建设 2026/5/20 22:33:09

新手友好!DASD-4B-Thinking模型部署与使用全攻略

新手友好&#xff01;DASD-4B-Thinking模型部署与使用全攻略 你是否试过在本地跑一个能真正“边想边答”的AI模型&#xff1f;不是简单接个API&#xff0c;而是亲手部署、亲眼看着它一步步推理出数学题解、写出可运行的Python代码、甚至拆解物理公式的推导逻辑&#xff1f;DAS…

作者头像 李华
网站建设 2026/5/22 23:28:13

2026年降AI工具红黑榜:嘎嘎降AI凭什么排第一梯队?

2026年降AI工具红黑榜&#xff1a;嘎嘎降AI凭什么排第一梯队&#xff1f; 毕业季快到了&#xff0c;朋友圈里一半人都在问&#xff1a;「有没有靠谱的降AI工具推荐&#xff1f;」 我这两个月帮同学测了十几款&#xff0c;有的效果不错&#xff0c;有的纯属浪费钱。今天直接给…

作者头像 李华