資源描述:
《oracle數(shù)據(jù)庫刪除重復(fù)記錄語句.docx》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、COL1中有重復(fù)記錄(COL1,COL2為主鍵),如何刪除 1、有少數(shù)重復(fù)記錄(在col1,col2上有索引比較好) DELETET WHERE(COL1,COL2)IN (SELECTCOL1,COL2FROMTGROUPBYCOL1,COL2HAVINGCOUNT(*)>1) AND ROWIDNOTIN (SELECTMIN(ROWID)FROMTGROUPBYCOL1,COL2HAVINGCOUNT(*)>1) 2、大部份記錄有重復(fù)記錄 DELETETWHEREROWIDNOTIN (SELECTMI
2、N(ROWID)FROMTGROUPBYCOL1,COL2) 3、其他寫法 DELETETWHEREROWIDIN (SELECTA.ROWIDFROMTA,TB WHEREA.COL1=B.COL1ANDA.COL2=B.COL2ANDA.ROWID>B.ROWID) ###################################### 10.刪除重復(fù)記錄 最高效的刪除重復(fù)記錄方法(因為使用了ROWID) DELETEFROMEMPE WHEREE.ROWID>(SELECTMIN(X.R
3、OWID) FROMEMPX WHEREX.EMP_NO=E.EMP_NO); 11.用TRUNCATE替代DELETE 當(dāng)刪除表中的記錄時,在通常情況下,回滾段(rollbacksegments)用來存放可以被恢復(fù)的信息.如果你沒有COMMIT事務(wù),ORACLE會將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài)(準(zhǔn)確地說是 恢復(fù)到執(zhí)行刪除命令之前的狀況) 而當(dāng)運(yùn)用TRUNCATE時,回滾段不再存放任何可被恢復(fù)的信息.當(dāng)命令運(yùn)行后,數(shù)據(jù)不能被恢復(fù).因此很少的資源被調(diào)用,執(zhí)行時間也會很短. (譯者按:TRUNCATE只在刪除全
4、表適用,TRUNCATE是DDL不是DML) 12.盡量多使用COMMIT 只要有可能,在程序中盡量多使用COMMIT,這樣程序的性能得到提高,需求也會因為COMMIT所釋放的資源而減少: COMMIT所釋放的資源: a.回滾段上用于恢復(fù)數(shù)據(jù)的信息. b.被程序語句獲得的鎖 c.redologbuffer中的空間 d.ORACLE為管理上述3種資源中的內(nèi)部花費(fèi)