小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

oracle 刪除重復(fù)項數(shù)據(jù) oracle 刪除重復(fù)項數(shù)據(jù)

 昵稱10504424 2013-05-05
網(wǎng)上有很多的刪除重復(fù)數(shù)據(jù)的 SQL 的例子. 有使用 GROUP BY HAVING 等, 還有一個 DISTINCT 關(guān)鍵字。我實驗了下覺得這些的刪除大數(shù)據(jù)的效率不怎么高!!

     我覺得有兩種方法刪除數(shù)據(jù)的效率是蠻大的,rowid 和分析函數(shù)。

     我現(xiàn)在用個例子來證明下:只匹配 NAME 完全相等的記錄

      先來創(chuàng)建個表    

CREATE TABLE TEMPTEMP (
ID NUMBER,
NAME VARCHAR2(20)
);
-- 生成重復(fù)數(shù)據(jù)
-- 0.297秒
DECLARE
BEGIN
FOR I IN 1..10000 LOOP
INSERT INTO TEMPTEMP VALUES (I, 'AAA' || I);
END LOOP;
END;
/
-- 0.015
DECLARE
BEGIN
FOR I IN 1..1000 LOOP
INSERT INTO TEMPTEMP VALUES (I, 'AAA' || I);
END LOOP;
END;
/
-- 0.031
DECLARE
TE INT;
BEGIN
FOR I IN 10001..11000 LOOP
TE := 1;
INSERT INTO TEMPTEMP VALUES (I, 'AAA' || TE);
TE := TE + 1;
END LOOP;
END;
/
SQL> select count(*) from temptemp;

COUNT(*)
--------------
12000

創(chuàng)建索引

 

-- 0.015秒 建索引
CREATE INDEX INDEX_TEMP ON TEMPTEMP(ID, NAME);

 

     1.根據(jù)rowid刪除數(shù)據(jù)     

-- 0.047秒 2000 rows deleted
DELETE FROM TEMPTEMP T1 WHERE T1.ROWID !=
(SELECT MAX(T2.ROWID) FROM TEMPTEMP T2  -----這里還可以用最小值去重復(fù)
WHERE /*T1.ID = T2.ID AND*/ T1.NAME = T2.NAME);
-- 去掉 注釋后 0.047秒 1000 rows deleted

2.使用分析函數(shù)

-- 0.031秒 2000 rows deleted
DELETE FROM TEMPTEMP T1 WHERE T1.ROWID IN
(SELECT RID FROM (SELECT ROWID RID,
ROW_NUMBER() OVER (PARTITION BY /*ID,*/ NAME ORDER BY ROWID) RN
FROM TEMPTEMP) WHERE RN != 1);
-- 去掉 ID 匹配后 0.031秒 1000 rows deleted

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多