最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

oracle快速刪除重復(fù)的記錄

 更新時(shí)間:2007年03月07日 00:00:00   作者:  
正在看的ORACLE教程是:oracle快速刪除重復(fù)的記錄。做項(xiàng)目的時(shí)候,一位同事導(dǎo)數(shù)據(jù)的時(shí)候,不小心把一個(gè)表中的數(shù)據(jù)全都搞重了,也就是說,這個(gè)表里所有的記錄都有一條重復(fù)的。這個(gè)表的數(shù)據(jù)是千萬級的,而且是生產(chǎn)系統(tǒng)。也就是說,不能把所有的記錄都刪除,而且必須快速的把重復(fù)記錄刪掉。

對此,總結(jié)了一下刪除重復(fù)記錄的方法,以及每種方法的優(yōu)缺點(diǎn)。

為了陳訴方便,假設(shè)表名為Tbl,表中有三列col1,col2,col3,其中col1,col2是主鍵,并且,col1,col2上加了索引。

1、通過創(chuàng)建臨時(shí)表

可以把數(shù)據(jù)先導(dǎo)入到一個(gè)臨時(shí)表中,然后刪除原表的數(shù)據(jù),再把數(shù)據(jù)導(dǎo)回原表,SQL語句如下:

creat table tbl_tmp (select distinct* from tbl);truncate table tbl;//清空表記錄insert into tbl select * from tbl_tmp;//將臨時(shí)表中的數(shù)據(jù)插回來。 
這種方法可以實(shí)現(xiàn)需求,但是很明顯,對于一個(gè)千萬級記錄的表,這種方法很慢,在生產(chǎn)系統(tǒng)中,這會給系統(tǒng)帶來很大的開銷,不可行。

2、利用rowid

在oracle中,每一條記錄都有一個(gè)rowid,rowid在整個(gè)數(shù)據(jù)庫中是唯一的,rowid確定了每條記錄是oracle中的哪一個(gè)數(shù)據(jù)文件、塊、行上。在重復(fù)的記錄中,可能所有列的內(nèi)容都相同,但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) 
如果已經(jīng)知道每條記錄只有一條重復(fù)的,這個(gè)sql語句適用。但是如果每條記錄的重復(fù)記錄有N條,這個(gè)N是未知的,就要考慮適用下面這種方法了。

3、利用max或min函數(shù)

這里也要使用rowid,與上面不同的是結(jié)合max或min函數(shù)來實(shí)現(xiàn)。SQL語句如下

delete from tbl awhere 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) 
還有一種方法,對于表中有重復(fù)記錄的記錄比較少的,并且有索引的情況,比較適用。假定col1,col2上有索引,并且tbl表中有重復(fù)記錄的記錄比較少,SQL語句如下4、利用group by,提高效率 

相關(guān)文章

  • Oracle數(shù)據(jù)庫時(shí)間格式轉(zhuǎn)換的常見示例

    Oracle數(shù)據(jù)庫時(shí)間格式轉(zhuǎn)換的常見示例

    這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫時(shí)間格式轉(zhuǎn)換的常見示例,在實(shí)際的工作中會經(jīng)常會用到to_char()、to_date()函數(shù)來對時(shí)間、日期進(jìn)行處理,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-02-02
  • Oracle數(shù)據(jù)庫常用命令整理(實(shí)用方法)

    Oracle數(shù)據(jù)庫常用命令整理(實(shí)用方法)

    這篇文章主要介紹了Oracle數(shù)據(jù)庫常用命令整理(實(shí)用方法),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Oracle中Union與Union All的區(qū)別(適用多個(gè)數(shù)據(jù)庫)

    Oracle中Union與Union All的區(qū)別(適用多個(gè)數(shù)據(jù)庫)

    如果我們需要將兩個(gè)select語句的結(jié)果作為一個(gè)整體顯示出來,我們就需要用到union或者union all關(guān)鍵字。union(或稱為聯(lián)合)的作用是將多個(gè)結(jié)果合并在一起顯示出來
    2012-07-07
  • Oracle數(shù)據(jù)庫中保留小數(shù)點(diǎn)后兩位的問題解讀

    Oracle數(shù)據(jù)庫中保留小數(shù)點(diǎn)后兩位的問題解讀

    在Oracle數(shù)據(jù)庫中,對數(shù)字和百分比進(jìn)行格式化,以保留兩位小數(shù),主要使用to_char()函數(shù),對于大數(shù)字如10000000.12,使用to_char(字段名, 'FM99999999999990.00')可確保保留兩位小數(shù)而無額外空格,對于百分比如86.63%
    2024-09-09
  • 淺析Oracle中的不等于號

    淺析Oracle中的不等于號

    前幾天碰到一個(gè)關(guān)于Oracle不等于的問題,最后搜索了一下,發(fā)現(xiàn)下面資料,拿來跟大家分享一下,需要的朋友可以參考下
    2013-07-07
  • ORACLE如何批量插入(Insert)

    ORACLE如何批量插入(Insert)

    這篇文章主要介紹了ORACLE如何批量插入(Insert),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Oracle索引質(zhì)量介紹和分析腳本分享

    Oracle索引質(zhì)量介紹和分析腳本分享

    這篇文章主要介紹了Oracle索引質(zhì)量介紹和分析腳本分享,索引質(zhì)量的高低對數(shù)據(jù)庫整體性能有著直接的影響,本文給出了演示以及索引創(chuàng)建的基本指導(dǎo)原則,最后給出了索引質(zhì)量分析腳本,需要的朋友可以參考下
    2014-09-09
  • 在oracle 數(shù)據(jù)庫查詢的select 查詢字段中關(guān)聯(lián)其他表的方法

    在oracle 數(shù)據(jù)庫查詢的select 查詢字段中關(guān)聯(lián)其他表的方法

    在實(shí)際開發(fā)過程中,特別是在做數(shù)據(jù)查詢的時(shí)候,能夠根據(jù)動態(tài)生成的sql語句將查詢的結(jié)果轉(zhuǎn)化并返回到業(yè)務(wù)處理邏輯(或頁面展示出來)能大大的減輕業(yè)務(wù)邏輯的處理復(fù)雜度。
    2009-08-08
  • Oracle查詢表占用空間的三種方法

    Oracle查詢表占用空間的三種方法

    在Oracle數(shù)據(jù)庫管理中,了解特定表或索引所占用的空間對于性能調(diào)優(yōu)、存儲規(guī)劃以及資源分配至關(guān)重要,本文檔介紹了三種常用的方法來查詢Oracle數(shù)據(jù)庫中表占用的空間,感興趣的小伙伴跟著小編一起來看看吧
    2024-12-12
  • Plsql Developer連接Oracle時(shí)出現(xiàn)Could not initialize oci.dll解決方案

    Plsql Developer連接Oracle時(shí)出現(xiàn)Could not initialize oci.dll解決方案

    這篇文章主要介紹了Plsql Developer連接Oracle時(shí)出現(xiàn)Could not initialize oci.dll解決方案,需要的朋友可以參考下
    2017-03-03

最新評論

宜章县| 阳信县| 乳山市| 扎鲁特旗| 巴里| 新乡市| 博爱县| 邢台县| 许昌县| 新建县| 惠东县| 五莲县| 东辽县| 兰西县| 简阳市| 芦山县| 长阳| 禄丰县| 迁西县| 壶关县| 鹰潭市| 同德县| 缙云县| 营口市| 虎林市| 海门市| 南华县| 崇明县| 九江市| 北碚区| 沂源县| 辽中县| 天峻县| 苍溪县| 金沙县| 吉首市| 孟津县| 乐陵市| 丹东市| 安义县| 福泉市|