一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - oracle快速刪除重復的記錄

oracle快速刪除重復的記錄

2019-10-23 15:07oracle教程網 Oracle

做項目的時候,一位同事導數據的時候,不小心把一個表中的數據全都搞重了,也就是說,這個表里所有的記錄都有一條重復的。這個表的數據是千萬級的,而且是生產系統。也就是說,不能把所有的記錄都刪除,而且必須快速的

做項目的時候,一位同事導數據的時候,不小心把一個表中的數據全都搞重了,也就是說,這個表里所有的記錄都有一條重復的。這個表的數據是千萬級的,而且是生產系統。也就是說,不能把所有的記錄都刪除,而且必須快速的把重復記錄刪掉。

對此,總結了一下刪除重復記錄的方法,以及每種方法的優缺點。

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

1、通過創建臨時表

可以把數據先導入到一個臨時表中,然后刪除原表的數據,再把數據導回原表,SQL語句如下:

creattabletbl_tmp(selectdistinct*fromtbl);truncatetabletbl;//清空表記錄insertintotblselect*fromtbl_tmp;//將臨時表中的數據插回來。

這種方法可以實現需求,但是很明顯,對于一個千萬級記錄的表,這種方法很慢,在生產系統中,這會給系統帶來很大的開銷,不可行。

2、利用rowid

在oracle中,每一條記錄都有一個rowid,rowid在整個數據庫中是唯一的,rowid確定了每條記錄是oracle中的哪一個數據文件、塊、行上。在重復的記錄中,可能所有列的內容都相同,但rowid不會相同。SQL語句如下:

deletefromtblwhererowidin(selecta.rowidfromtbla,tblbwherea.rowid>b.rowidanda.col1=b.col1anda.col2=b.col2)

如果已經知道每條記錄只有一條重復的,這個sql語句適用。但是如果每條記錄的重復記錄有N條,這個N是未知的,就要考慮適用下面這種方法了。

3、利用max或min函數

這里也要使用rowid,與上面不同的是結合max或min函數來實現。SQL語句如下

deletefromtblawhererowidnotin(selectmax(b.rowid)fromtblbwherea.col1=b.col1anda.col2=b.col2);//這里max使用min也可以

或者用下面的語句

deletefromtblawhererowid<(selectmax(b.rowid)fromtblbwherea.col1=b.col1anda.col2=b.col2);//這里如果把max換成min的話,前面的where子句中需要把"<"改為">"

跟上面的方法思路基本是一樣的,不過使用了groupby,減少了顯性的比較條件,提高效率。SQL語句如下:

deletefromtblwhererowidnotin(selectmax(rowid)fromtbltgroupbyt.col1,t.col2);deletefromtblwhere(col1,col2)in(selectcol1,col2fromtblgroupbycol1,col2havingcount(*)>1)androwidnotin(selectnin(rowid)fromtblgroupbycol1,col2havingcount(*)>1)

還有一種方法,對于表中有重復記錄的記錄比較少的,并且有索引的情況,比較適用。假定col1,col2上有索引,并且tbl表中有重復記錄的記錄比較少,SQL語句如下4、利用groupby,提高效率

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99久久一香蕉国产线看观看 | 大乳奶水bbw | 第一次不是你高清在线观看 | 爱情岛论坛亚洲一号路线 | 欧美兽皇另类 | 国产农村一一级特黄毛片 | 高清视频免费 | 国产福利在线观看91精品 | 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 | 201天天爱天天做 | 欧洲兽皇| 亚洲国产精品久久久久久 | 亚洲va天堂va国产va久久 | 免费观看美景之屋 | 亚洲 无码 制服 日韩 | 俄罗斯大白屁股 | 黄漫免费观看 | 欧美精品一区二区三区免费播放 | 免费人成在线观看69式小视频 | 国产成人啪精品午夜在线播放 | 青青青青青国产免费手机看视频 | 欧美成人免费观看bbb | 秋霞理论一级在线观看手机版 | 久久视频在线视频观看精品15 | 韩剧在线观看 | 都市风流贵妇激情 | 97久久天天综合色天天综合色hd | 国产馆精品推荐在线观看 | 国产午夜精品久久理论片小说 | 晓雪老师我要进你里面好爽 | 久久国产乱子伦免费精品 | 97久久久亚洲综合久久88 | chinese东北痞子gay | 丝袜老师好湿好紧我要进去了 | 被老外玩爽的中国美女视频 | 99美国热| 日韩成人免费aa在线看 | 亚洲第一综合网 | 国产精品综合在线 | 色综色天天综合网 | yy6080久久国产伦理 |