oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
全部删除
如果是删除某个表的所有数据,并且不需要回滚,使用 TRUNCATE 就ok了。关于Trancate 参见这里http://blog.csdn.net/gnolhh168/archive/2011/05/24/6442561.aspx
SQL> truncate table table_name;
条件删除
如果删除数据有条件,如 delete from tablename where col1 = 'lucy';这时除了加索引外, 你可以删除时加NO LOGGING选项,不写日志加快删除速度
引用某人的一句话“几千万条记录的表都不分区,明显有问题嘛。Oracle的技术支持工程师建议,2,000,000条以上记录的表,应该考虑分区,你完全可以按照时间为维度来建表,每个月的数据存放在一个分区表中,以后要删除一个月的数据,直接truncate table即可,不记录日志,速度很快。”
删除大量重复记录
《转》做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而且是生产系统。也就是说,不能把所有的记录都删除,而且必须快速的把重复记录删掉。
对此,总结了一下删除重复记录的方法,以及每种方法的优缺点。
为了陈诉方便,假设表名为Tbl,表中有三列col1,col2,col3,其中col1,col2是主键,并且,col1,col2上加了索引。
1、通过创建临时表
可以把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:
creat table tbl_tmp (select distinct* from tbl);
truncate table tbl; //清空表记录i
nsert into tbl select * from tbl_tmp;//将临时表中的数据插回来。
这种方法可以实现需求,但是很明显,对于一个千万级记录的表,这种方法很慢,在生产系统中,这会给系统带来很大的开销,不可行。
2、利用rowid
在oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同。SQL语句如下:
delete from tbl where rowid in (select a.rowid
from tbl a, tbl b
where a.rowid>b.rowid and a.col1=b.col1 and a.col2 = b.col2)
如果已经知道每条记录只有一条重复的,这个sql语句适用。但是如果每条记录的重复记录有N条,这个N是未知的,就要考虑适用下面这种方法了。
3、利用max或min函数
这里也要使用rowid,与上面不同的是结合max或min函数来实现。SQL语句如下
delete from tbl a
where rowid not in (
select max(b.rowid)
from tbl b
where a.col1=b.col1 and a.col2 = b.col2); //这里max使用min也可以
或者用下面的语句
delete from tbl awhere rowid<(
select max(b.rowid)
from tbl b
where a.col1=b.col1 and a.col2 = b.col2); //这里如果把max换成min的话,前面的where子句中需要把"<"改为">"
跟上面的方法思路基本是一样的,不过使用了group by,减少了显性的比较条件,提高效率。SQL语句如下:
deletefrom tbl where rowid not in (
select max(rowid)
from tbl tgroup by t.col1, t.col2);
delete from tbl where (col1, col2) in (
select col1,col2
from tblgroup bycol1,col2havingcount(*) >1) and rowidnotin(selectnin(rowid)fromtblgroup bycol1, col2havingcount(*) >1) ----???
还有一种方法,对于表中有重复记录的记录比较少的,并且有索引的情况,比较适用。假定col1,col2上有索引,并且tbl表中有重复记录的记录比较少,SQL语句如下4、利用group by,提高效率
oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)的更多相关文章
- [Oracle]快速构造大量数据的方法
[Oracle]快速构造大量数据的方法: create table tab001(id integer primary key, val varchar2(100)); insert into tab ...
- oracle 快速备份表数据
oracle 快速备份表数据 CreateTime--2018年2月28日17:04:50 Author:Marydon UpdateTime--2017年1月20日11:45:07 1.1.9. ...
- c# sqlserver 删除大批量数据超时
我做的项目有个功能需要进行批量删除,删除的数据量有4.5W条数据. 通过下面的sql语句删除这么多数据,直接导致结果超时,无法删除数据. ,,,......) 我查了一些资料,可能找的不全,找到了一个 ...
- net core天马行空系列-各大数据库快速批量插入数据方法汇总
1.前言 hi,大家好,我是三合.我是怎么想起写一篇关于数据库快速批量插入的博客的呢?事情起源于我们工作中的一个需求,简单来说,就是有一个定时任务,从数据库里获取大量数据,在应用层面经过处理后再把结果 ...
- 一般删除网页数据和jquery下使用Ajax删除数据的区别
1. 一般删除网页数据 就是指用户在点击删除的时候,会跳转到DeleteUser.ashx一般处理程序中,并且通过get传参的方式传递一个id的参数,然后在后台处理 <a href='Delet ...
- oracle中生成大批量数据的方法-下
方法五:使用PLSQL的数据生成器 首先测试环境建立:dept表 CREATE TABLE dept(deptno NUMBER(6),dname VARCHAR2(20),loc VARCHAR2( ...
- SQL Server从读写频繁的大表中删除大批量数据
如果我们直接用delete from语句来删除读写频繁的大表中的数据,很有可能会因为where的条件是全表扫描从而导致整个表被锁住了.如果该表是读写频繁的生产库那简直就是一场灾难,所有的线上读写请求都 ...
- elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)
文章目录 1.添加新用户,通过dialog的弹窗形式 1.1 添加的按钮 1.2 调用方法设置窗口可见 1.3 窗口代码 1.4 提交注册信息方法 1.5 使用mybatisPlus方法进行添加信息到 ...
- 【转】 关于data factory的介绍——即如何快速生成大批量数据
上次在我的博客中讲述了quest公司的spotlight系列软件,这次来扯淡一下quest公司的另一测试辅助软件 datafactory(数据工厂),顾名思义,数据工厂是生产数据的,主要应用领域是性能 ...
随机推荐
- 同一个tomcat多个web应用共享session
tomcat版本:apache-tomcat-6.0.29(次方tomcat6和tomcat7支持) 1.修改D:\apache-tomcat-6.0.29\conf\server.xml文件 ...
- Speeding up AngularJS apps with simple optimizations
AngularJS is a huge framework with that already has many performance enhancements built in, but they ...
- struts2中constant参数设置
序号 方法 说明 1 <constant name="struts.i18n.encoding" value="UTF-8"/> 指定web应用默认 ...
- nginx自启动脚本
#!/bin/bash # #Startup script for Nginx - this script starts and stops the nginx daemon # # chkconfi ...
- [react native] Error loading page
如上图显示的错误,解决方法如下: 在react native ios项目的info.plist文件中,新增一个属性. 在Info.plist中添加NSAppTransportSecurity类型Dic ...
- Ubuntu下PHP开发配置(新增redis、sphinx、sqlserver相关配置)
由于本人比较懒,所以一般都是用xampp的直接拿来改的…………(当然xampp中一般php版本都是比较新的用的过程中请大家注意哈,可能会和老版本冲突) 此次除了使用xampp外,还扩展了sphinx, ...
- 用cookie实现localstorage功能
在项目中需要利用到html5的localstorage.但在利用这个属性的时候却发现无法达到预定目标.经过不断的检查及排除,最后发现原因所在: 项目中使用的浏览器是支持localstorage的,但是 ...
- Javascript(JS)中的大括号{}和中括号[]详解
一.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数. 如:var LangShen = {"Name":"Langshen",&qu ...
- Delphi XE5教程1:语言概述
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...
- RouterOS的MikroTik脚本从DNS更新IPSEC端的IP地址
#Script for changing IPSEC address when DNS changes. #Script will iterate through all peers looking ...