oracle 删除重复数据,24亿条数据,如何删除比较合适

Oracle大批量删除数据方法_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Oracle大批量删除数据方法
&&Oracle大批量删除数据方法
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩1页未读,
定制HR最喜欢的简历
你可能喜欢豆丁微信公众号
君,已阅读到文档的结尾了呢~~
如何在一个1亿行的大oracle表中删除1千万行数据的第二种思路
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
如何在一个1亿行的大oracle表中删除1千万行数据的第二种思路
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口oracle如何删除多行数据_百度知道
oracle如何删除多行数据
在这个表里&GEO3D&.&DKSJ& 我想删除当&HOLEID&分别=1,201,205,309,207,901,405所在行数据时,SQL语句要怎么写啊,谢谢哈,我没有分了
我有更好的答案
delete from GEO3D.DKSJ where HOLEID in(1,201,205,309,207,901,405);
采纳率:23%
来自团队:
delete GEO3D.DKSJ where HOLEID in (1,201,205,309,207,901,405);
为您推荐:
其他类似问题
您可能关注的内容
oracle的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。生的伟大,死的光荣----老毛
oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
如果是删除某个表的所有数据,并且不需要回滚,使用 TRUNCATE 就ok了。关于Trancate 参见
SQL& truncate
如果删除数据有条件,如 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);
//清空表记录i
nsert into tbl select * from tbl_//将临时表中的数据插回来。
这种方法可以实现需求,但是很明显,对于一个千万级记录的表,这种方法很慢,在生产系统中,这会给系统带来很大的开销,不可行。
2、利用rowid
在oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同。SQL语句如下:
delete from tbl where rowid in (select a.rowid
from tbl a,
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)
select col1,col2
from tblgroup bycol1,col2havingcount(*)
&1) and rowidnotin(selectnin(rowid)fromtblgroup bycol1,
col2havingcount(*) &1)
----???
还有一种方法,对于表中有重复记录的记录比较少的,并且有索引的情况,比较适用。假定col1,col2上有索引,并且tbl表中有重复记录的记录比较少,SQL语句如下4、利用group by,提高效率
没有更多推荐了,

我要回帖

更多关于 oracle恢复删除的数据 的文章

 

随机推荐