﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-数据仓库 Or SOA-随笔分类-Oracle</title><link>http://www.blogjava.net/xichengmylove/category/28751.html</link><description>SOA、DataStage、Unix、Java EE、Oracle、Data Migration、Data Integration</description><language>zh-cn</language><lastBuildDate>Tue, 08 Jan 2008 04:09:17 GMT</lastBuildDate><pubDate>Tue, 08 Jan 2008 04:09:17 GMT</pubDate><ttl>60</ttl><item><title>删除重复数据的3种方法</title><link>http://www.blogjava.net/xichengmylove/archive/2008/01/08/173544.html</link><dc:creator>羽翼渐丰</dc:creator><author>羽翼渐丰</author><pubDate>Tue, 08 Jan 2008 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/xichengmylove/archive/2008/01/08/173544.html</guid><wfw:comment>http://www.blogjava.net/xichengmylove/comments/173544.html</wfw:comment><comments>http://www.blogjava.net/xichengmylove/archive/2008/01/08/173544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xichengmylove/comments/commentRss/173544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xichengmylove/services/trackbacks/173544.html</trackback:ping><description><![CDATA[<p>今天google分析函数row_number()的时候发现的，觉得很好：<br />
<br />
<span style="font-family: Arial; background-color: #ffff99">表demo是重复拷贝自dba_objects，有88万左右，不重复的是27323，没有索引<br style="font-family: " />
方法一：delete from demo a where a.rowid &lt;&gt; (select max(rowid) from demo b where<br style="font-family: " />
b.object_id=a.object_id);<br style="font-family: " />
耗时：几个小时以上 <br style="font-family: " />
方法二： delete from demo where rowid in <br style="font-family: " />
(select rid from <br style="font-family: " />
(select rowid rid,row_number() over(partition by object_id order by rowid) rn<br style="font-family: " />
from demo)<br style="font-family: " />
where rn &lt;&gt; 1 );<br style="font-family: " />
耗时：30秒<br style="font-family: " />
方法三： create table demo2 as <br style="font-family: " />
select object_id,owner... from<br style="font-family: " />
(select demo.*,row_number() over(partition by object_id order by rowid) rn from demo)<br style="font-family: " />
where rn = 1;<br style="font-family: " />
truncate table demo; insert into demo select * from demo2; drop table demo2;<br style="font-family: " />
共耗时： 10秒，适合大数据量的情况，产生更少回滚量；</span><br />
<br />
学到了分析函数row_number(),对于object_id和rowid也有了一些认识。oracle要学的东西太多了，什么时候是个头啊<img alt="" src="/CuteSoft_Client/CuteEditor/images/emteeth.gif" align="absMiddle" border="0" />。上面的方法不是很难理解，但也还没有完全理解，有机会实际试试。</p>
<img src ="http://www.blogjava.net/xichengmylove/aggbug/173544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xichengmylove/" target="_blank">羽翼渐丰</a> 2008-01-08 10:04 <a href="http://www.blogjava.net/xichengmylove/archive/2008/01/08/173544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>