oracle刪除重復(fù)記錄
delete
from tb_user_add_serv_fee a
where a.register_id in (select t.register_id
from tb_user_add_serv_fee t
where t.ubill_month = '201007'
group by t.register_id, t.region_no
having count(1) > 1)
and rowid not in (select min(rowid)
from tb_user_add_serv_fee t
where t.ubill_month = '201007'
group by t.register_id
having count(1) > 1)
and a.ubill_month = '201007';
Oracle刪除重復(fù)記錄的最好的方
法:
DELETE
FROM EMP E WHERE E.ROWID > (SELECT MIN(y.ROWID)
FROM EMP y
WHERE
y.EMPNO = E.EMPNO )
1、子查詢找出某員工最低的ROWID(肯定只有一個),其它大于這條記錄ROWID的,全部刪除。
2、Oracle中使用ROWID刪除重復(fù)記錄最快,因為Rowid對應(yīng)這條記錄在磁盤上的位置
面試:性能 優(yōu)化
規(guī)則:SELECT子句中避免使用 ‘
* ‘
規(guī)則:使用
exists語句代替in語句;
使用not exists代替not in
規(guī)則:使用truncate代替delete from
表語句
規(guī)則:減少訪
問數(shù)據(jù)庫的次數(shù)
規(guī)
則:減少訪問數(shù)據(jù)庫的次數(shù)
規(guī)則:使用表的別名(Alias)
規(guī)則:盡快使用COMMIT
規(guī)則:數(shù)據(jù)庫冗余字段的設(shè)計
其它:Oracle與性能有關(guān)的幾個特征(三個緩沖區(qū))
面試:企業(yè)為什么經(jīng)常使用Oracle?
Oracle為什么這么牛?
回答:從三個緩沖區(qū)入手
一、日志緩沖區(qū)
·在添加一條記錄時,數(shù)據(jù)庫在后臺同時也要記錄一條日志
·Oracle
能夠先將日志寫在內(nèi)存中,緩沖區(qū)滿后再一次性寫入磁盤
二、塊緩沖區(qū)
·如果一個表(如部門表)很少更新但經(jīng)常使用,那么可以將該表保存
在內(nèi)存中,從而避免頻繁訪問磁盤。
·訪問內(nèi)存的速度大于高于訪問磁盤的速度。
三、SQL緩沖區(qū)
·數(shù)據(jù)庫執(zhí)行步驟:語法分
析、語義分析、編譯、優(yōu)化……
·所以SQL在執(zhí)行以前所消耗的時間是很長的
·Oracle數(shù)據(jù)庫會將sql保存在SQL緩沖區(qū),如果
執(zhí)行的是相同SQL,則無論執(zhí)行多少次,都只會編譯分析一次。從而減少分析和優(yōu)化時間。
原貼:http://mamaoyuan625.javaeye.com/blog/394796