having 子句的用法 having 子句對 group by 子句所確定的行組進行控制
having 子句條件中只允許涉及常量
聚組函數或group by 子句中的列
外部聯接+的用法 外部聯接
+
按其在
=
的左邊或右邊分左聯接和右聯接
若不帶
+
運算符的表中的一個行不直接匹配於帶
+
預算符的表中的任何行
則前者的行與後者中的一個空行相匹配並被返回
若二者均不帶
+
則二者中無法匹配的均被返回
利用外部聯接
+
可以替代效率十分低下的 not in 運算
大大提高運行速度
例如
下面這條命令執行起來很慢
select a
empno from emp a where a
empno not in(select empno from emp
where job=
SALE
);
倘若利用外部聯接
改寫命令如下:
select a
empno from emp a
emp
b where a
empno=b
empno(+) and b
empno is null and b
job=
SALE
;
可以發現
運行速度明顯提高
刪除表內重復記錄的方法 可以利用這樣的命令來刪除表內重復記錄:
delete from table_name a where rowid< (select max(rowid) from table_name where column
=lumn
and column
=lumn
and colum
=lum
and
);
不過
當表比較大(例如
萬條以上)時
這個方法的效率之差令人無法忍受
需要另想辦法(可參看拙文《電信計費中長途重復話單的技術處理》
《計算機與通信》
)
set transaction 命令的用法 在執行大事務時
有時oracle會報出如下的錯誤:
ORA
:snapshot too old (rollback segment too small)
這說明oracle給此事務隨機分配的回滾段太小了
這時可以為它指定一個足夠大的回滾段
以確保這個事務的成功執行
例如
set transaction use rollback segment roll_abc;delete from table_name where mit;
回滾段roll_abc被指定給這個delete事務
commit命令則在事務結束之後取消了回滾段的指定
使用索引的注意事項 select
update
delete 語句中的子查詢應當有規律地查找少於
%的表行
如果一個語句查找的行數超過總行數的
%
它將不能通過使用索引獲得性能上的提高
索引可能產生碎片
因為記錄從表中刪除時
相應也從表的索引中刪除
表釋放的空間可以再用
而索引釋放的空間卻不能再用
頻繁進行刪除操作的被索引的表
應當階段性地重建索引
以避免在索引中造成空間碎片
影響性能
在許可的條件下
也可以階段性地truncate表
truncate命令刪除表中所有記錄
也刪除索引碎片
數據庫重建應注意的問題 在利用import進行數據庫重建過程中
有些視圖可能會帶來問題
因為結構輸入的順序可能造成視圖的輸入先於它低層次表的輸入
這樣建立視圖就會失敗
要解決這一問題
可采取分兩步走的方法:首先輸入結構
然後輸入數據
命令舉例如下 (uesrname:jfcl
password:hfjf
host sting:ora
數據文件:expdata
dmp):
imp jfcl/hfjf@ora
file=empdata
dmp rows=Nimp jfcl/hfjf@ora
file=empdata
dmp full=Y buffer=
commit=Y ignore=Y
第一條命令輸入所有數據庫結構
但無記錄
第二次輸入結構和數據
字節提交一次
ignore=Y選項保證第二次輸入既使對象存在的情況下也能成功
From:http://tw.wingwit.com/Article/program/Oracle/201311/17776.html