news 2026/5/5 6:31:35

巧用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/1 4:06:08

AudioLDM-S部署教程(CUDA兼容版):NVIDIA驱动+CUDA版本匹配指南

AudioLDM-S部署教程&#xff08;CUDA兼容版&#xff09;&#xff1a;NVIDIA驱动CUDA版本匹配指南 1. 为什么需要这份CUDA兼容指南&#xff1f; 你可能已经试过直接运行AudioLDM-S&#xff0c;却在启动时卡在CUDA out of memory或module torch has no attribute cuda——这不是…

作者头像 李华
网站建设 2026/5/1 11:13:57

RMBG-2.0性能压测:连续处理500张图内存泄漏检测与稳定性验证

✂ RMBG-2.0 (BiRefNet) 极速智能抠图工具 基于RMBG-2.0&#xff08;BiRefNet&#xff09; 目前最强开源抠图模型开发的本地智能抠图工具&#xff0c;支持一键去除图片背景并生成透明背景PNG文件&#xff0c;内置标准图像预处理与原始尺寸还原逻辑&#xff0c;抠图精度高、边缘…

作者头像 李华
网站建设 2026/5/3 19:20:14

[特殊字符] GLM-4V-9B企业应用:自动化图文内容审核系统构建

&#x1f985; GLM-4V-9B企业应用&#xff1a;自动化图文内容审核系统构建 在内容爆炸式增长的今天&#xff0c;电商、社交平台、媒体机构每天需处理数以万计的图文素材——商品主图是否合规&#xff1f;用户上传的配图是否含敏感信息&#xff1f;营销海报是否存在版权风险&am…

作者头像 李华
网站建设 2026/5/1 11:41:05

零基础玩转Nano-Banana:一键生成专业级平铺图

零基础玩转Nano-Banana&#xff1a;一键生成专业级平铺图 你有没有过这样的时刻——盯着一张堆满零件的电路板照片发呆&#xff0c;想把它变成说明书里那种清爽规整的分解图&#xff1b;或者手握一件新设计的帆布包&#xff0c;却苦于找不到既专业又吸睛的展示方式&#xff1f…

作者头像 李华
网站建设 2026/5/1 16:26:35

如何用Z-Image-Turbo解决图像模糊问题?真实调参经验分享

如何用Z-Image-Turbo解决图像模糊问题&#xff1f;真实调参经验分享 图像模糊是AI生成内容中最常见、最令人沮丧的问题之一——你精心构思的提示词&#xff0c;却换来一张“雾里看花”般的输出&#xff1a;边缘发虚、细节糊成一片、主体轮廓不清晰。很多人误以为这是模型能力不…

作者头像 李华
网站建设 2026/5/1 14:58:23

图像编辑新选择:科哥镜像支持多种格式上传

图像编辑新选择&#xff1a;科哥镜像支持多种格式上传 1. 为什么你需要这个图像编辑工具 你有没有遇到过这样的情况&#xff1a;一张精心拍摄的照片&#xff0c;却被路人、电线杆或者水印破坏了整体美感&#xff1b;电商主图上需要去掉模特身上的logo&#xff0c;但PS抠图耗时…

作者头像 李华