索引临时表【Oracle】比较快的删除重复数据的方式Strut2教程-java教程

查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记载吧!

    网上形形色色删除重复数据的法方就是没见过这类:

    DELETE FROM prod_grid_inc

    WHERE  ROWID IN (SELECT b.row_id2

                 FROM   (SELECT ROWID row_id2,

                                a.*,

                                row_number() over(PARTITION BY a.prod_id ORDER BY a.insert_date DESC) row_num

                         FROM   prod_grid_inc a) b

                 WHERE  b.row_num >= 2);

    大家不妨尝尝,经过实验,的确快了不少。

    如果是几G的大表(这类时候一般是分区表),这类情况最好是append+nologging式方,将一唯记载insert到临时表中,然后通过换交分区的式方换交去过,前后只要需几分钟,其中临时表的表空间和索引表空间要合符正式表的要求:

    每日一道理
生命,是一场漫长的棋局。这盘棋没有猎猎西风,没有四起狼烟,只有在取舍和进退中抉择。只有像棋中的小卒那样,勇往直前,毫不退缩沿着沟沟坎坎的人生之路,艰难而执着的求索,前进,才会谱写人生最壮丽的强者之歌。

    eg:

    INSERT /*+append*/ INTO ACCT_ITEM_MID

    SELECT *

  FROM ACCT_ITEM SUBPARTITION(P_201109_SUB_P_XX) a

 WHERE ROWID = (SELECT MAX(ROWID)

                  FROM ACCT_ITEM SUBPARTITION(P_201109_SUB_P_XX) a1

                 WHERE a.cust_id = a1.cust_id);

    COMMIT;

               

    ALTER TABLE ACCT_ITEM EXCHANGE SUBPARTITION P_201109_SUB_P_XX WITH TABLE ACCT_ITEM_MID;

    当然exchange的式方虽然快,但是这类情况会致导索引效失,要需重建索引:

    alter index ind_name rebuild subpartition subpartition_name;

    如此便可。

文章结束给大家分享下程序员的一些笑话语录: 一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”

你可能感兴趣的:(oracle)