发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
我觉得有两种方法删除数据的效率是蛮大的,rowid 和分析函数。
我现在用个例子来证明下:只匹配 NAME 完全相等的记录
先来创建个表
CREATE TABLE TEMPTEMP (ID NUMBER,NAME VARCHAR2(20));-- 生成重复数据-- 0.297秒DECLAREBEGINFOR I IN 1..10000 LOOPINSERT INTO TEMPTEMP VALUES (I, 'AAA' || I);END LOOP;END;/-- 0.015DECLAREBEGINFOR I IN 1..1000 LOOPINSERT INTO TEMPTEMP VALUES (I, 'AAA' || I);END LOOP;END;/-- 0.031DECLARETE INT;BEGINFOR I IN 10001..11000 LOOPTE := 1;INSERT INTO TEMPTEMP VALUES (I, 'AAA' || TE);TE := TE + 1;END LOOP;END;/SQL> select count(*) from temptemp;COUNT(*)--------------12000
创建索引
-- 0.015秒 建索引CREATE INDEX INDEX_TEMP ON TEMPTEMP(ID, NAME);
1.根据rowid删除数据
-- 0.047秒 2000 rows deleted DELETE FROM TEMPTEMP T1 WHERE T1.ROWID !=(SELECT MAX(T2.ROWID) FROM TEMPTEMP T2 -----这里还可以用最小值去重复WHERE /*T1.ID = T2.ID AND*/ T1.NAME = T2.NAME);-- 去掉 注释后 0.047秒 1000 rows deleted
2.使用分析函数
-- 0.031秒 2000 rows deletedDELETE FROM TEMPTEMP T1 WHERE T1.ROWID IN (SELECT RID FROM (SELECT ROWID RID, ROW_NUMBER() OVER (PARTITION BY /*ID,*/ NAME ORDER BY ROWID) RN FROM TEMPTEMP) WHERE RN != 1);-- 去掉 ID 匹配后 0.031秒 1000 rows deleted
来自: 昵称10504424 > 《Oracle》
0条评论
发表
请遵守用户 评论公约
Oracle 绑定变量
oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.绑定变量只是起到占位的作用,同名的绑定变量并不意味着在它们是同样的,在传递时要考虑的是传递的值与绑定...
细数你应该修炼的Oracle基本功 - 51CTO.COM
1. select avg(sal) avg_sal,deptno from emp group by deptno.select d.dname,t.avg_sal,t.deptno,s.grade from (select avg(sal) avg_sal,deptno from emp group by deptno) t join salgrade s ...
Oracle循环语句
Oracle循环语句。编写循环控制结构时,用户可以使用基本循环,WHILE循环和FOR循环等三种类型的循环语句,下面分别介绍使用这三种循环语句的方法。嵌套循环是指在一个循环语句之中嵌入另一个循环语句,...
PLSQL语法
PLSQL语法PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以...
Oracle PL/SQL开发基础(第二十五弹:操纵游标数据)
--定义游标结果记录变量 CURSOR dept_cursor IS SELECT * FROM dept FOR UPDATE deptno,dname; --定义游标变量BEGIN OPEN dept_cursor; --打开游标 FETCH dept_cursor INTO dept_row; --提取游标数据 W...
mysql游标循环的使用
mysql游标循环的使用。-- 需要定义接收游标数据的变量 DECLARE a CHAR(16); -- 游标 DECLARE cur CURSOR FOR SELECT i FROM test.t; -- 遍历数据结束标志 DECLARE done INT DEFAULT FALSE; -- 将结束...
DB2存储过程4类循环简单实例
MySql 笔记三 循环语句
delimiter $$ // 定义结束符为 $$drop procedure if exists wk; // 删除 已有的 存储过程create procedure wk() // 创建新的存储过程begin declare i int; // ...
MySQL5.0新特性教程存储过程:第三讲
里面有两个IF语句,一个是IF语句END IF,另一个是IF语句ELSE语句END IF。我们可以在BEGIN、WHILE、REPEAT或者LOOP语句前使用语句标号,语句标号只能在合法的语句前面使用。因此"LEAVE label_3&quo...
微信扫码,在手机上查看选中内容