国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

最高效的刪除重復(fù)記錄方法

2024-07-21 02:34:05
字體:
供稿:網(wǎng)友

  表T結(jié)構(gòu)如下
  
  COL1
  
  中有重復(fù)記錄(COL1,COL2為主鍵),如何刪除
  
  1、有少數(shù)重復(fù)記錄(在col1,col2上有索引比較好)
  
  DELETE T
  WHERE (COL1,COL2) IN
  (SELECT COL1,COL2 FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)
  AND
  ROWID NOT IN
  (SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)
  
  2、大部份記錄有重復(fù)記錄
  
  DELETE T WHERE ROWID NOT IN
  (SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2)
  
  3、其他寫法
  
  DELETE T WHERE ROWID IN
  (SELECT A.ROWID FROM T A,T B
  WHERE A.COL1=B.COL1 AND A.COL2 = B.COL2 AND A.ROWID > B.ROWID)
  
  ######################################
  
  10. 刪除重復(fù)記錄
  
  最高效的刪除重復(fù)記錄方法 ( 因為使用了ROWID)
  
  DELETE FROM EMP E
  
  WHERE E.ROWID > (SELECT MIN(X.ROWID)
  
  FROM EMP X
  
  WHERE X.EMP_NO = E.EMP_NO);
  
  11. 用TRUNCATE替代DELETE
  
  當(dāng)刪除表中的記錄時,在通常情況下, 回滾段(rollback segments ) 用來存放可以被恢復(fù)的信息. 假如你沒有COMMIT事務(wù),Oracle會將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài)(準(zhǔn)確地說是
  
  恢復(fù)到執(zhí)行刪除命令之前的狀況)
  
  而當(dāng)運用TRUNCATE時, 回滾段不再存放任何可被恢復(fù)的信息.當(dāng)命令運行后,數(shù)據(jù)不能被恢復(fù).因此很少的資源被調(diào)用,執(zhí)行時間也會很短.
  
  (譯者按: TRUNCATE只在刪除全表適用,TRUNCATE是DDL不是DML)
  
  12. 盡量多使用COMMIT
  
  只要有可能,在程序中盡量多使用COMMIT, 這樣程序的性能得到提高,需求也會因為COMMIT所釋放的資源而減少:
  
  COMMIT所釋放的資源:
  
  a. 回滾段上用于恢復(fù)數(shù)據(jù)的信息.
  
  b. 被程序語句獲得的鎖
  
  c. redo log buffer 中的空間
  
  d. ORACLE為治理上述3種資源中的內(nèi)部花費
  
  (譯者按: 在使用COMMIT時必須要注重到事務(wù)的完整性,現(xiàn)實中效率和事務(wù)完整性往往是魚和熊掌不可得兼)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 毕节市| 宣武区| 怀安县| 长白| 宁河县| 措美县| 乳山市| 靖远县| 富源县| 璧山县| 揭西县| 芷江| 宜章县| 龙陵县| 抚远县| 额尔古纳市| 饶平县| 津南区| 华容县| 信宜市| 广水市| 托里县| 武义县| 广元市| 怀安县| SHOW| 启东市| 安义县| 东海县| 山阳县| 襄城县| 浑源县| 泸西县| 浮山县| 新巴尔虎左旗| 育儿| 漠河县| 广德县| 上杭县| 恩施市| 依安县|