和外來鍵相關的一點效能問題總結!
SQL> create table t tablespace users as select * from dba_objects;
表已建立。
SQL> alter table t add constraint pk_t primary key (object_id);
alter table t add constraint pk_t primary key (object_id)
*
第 1 行出現錯誤:
ORA-01449: 列包含 NULL 值; 無法將其變更為 NOT NULL
SQL> delete from t where object_id is null ;
已刪除2行。
SQL> commit;
提交完成。
SQL> alter table t add constraint pk_t primary key (object_id);
表已更改。
SQL> create table tt tablespace users as select * from dba_objects;
表已建立。
SQL> insert into tt select * from tt;
已建立11661行。
SQL> insert into tt select * from tt;
已建立23322行。
SQL> insert into tt select * from tt;
已建立46644行。
SQL> commit;
提交完成。
SQL> delete from tt where object_id is null ;
已刪除16行。
SQL> commit;
提交完成。
SQL> alter table tt add constraint fk_tt foreign key (object_id) references t(ob
ject_id);
alter table tt add constraint fk_tt foreign key (object_id) references t(object_
id)
*
第 1 行出現錯誤:
ORA-02298: 無法驗證 (SYS.FK_TT) - 未找到父項關鍵字
SQL> select distinct object_id from tt where object_id not in (select object_id
from t);
OBJECT_ID
----------
12998
12997
SQL> delete from tt where object_id in (12997,12998);
已刪除16行。
SQL> commit;
提交完成。
SQL> alter table tt add constraint fk_tt foreign key (object_id) references t(ob
ject_id) on delete cascade;
表已更改。
SQL> alter session set sql_trace=true;
會話已更改。
SQL> delete from t where object_id=2;
已刪除 1 行。
SQL> alter session set sql_trace=false;
會話已更改。
SQL>
--=====================
C:>tkprof G:oracleproduct10.2.0adminorcludumporcl_ora_2100.trc d.txt
TKPROF: Release 10.2.0.1.0 - Production on 星期二 10月 12 12:12:29 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
C:>
--=====================
********************************************************************************
delete from t
where
object_id=2
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.07 0.07 0 1 0 0
Execute 1 0.00 0.00 0 2 6 1
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.07 0.07 0 3 6 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYS
Rows Row Source Operation
------- ---------------------------------------------------
1 DELETE T (cr=1195 pr=0 pw=0 time=6786 us)
1 INDEX UNIQUE SCAN PK_T (cr=2 pr=0 pw=0 time=13 us)(object id 12997)
********************************************************************************
delete from "SYS"."TT"
where
"OBJECT_ID" = :1
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.01 0.00 0 1193 8 8
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.01 0.00 0 1193 8 8
Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: CHOOSE
Parsing user id: SYS (recursive depth: 1)
Rows Row Source Operation
------- ---------------------------------------------------
0 DELETE TT (cr=1193 pr=0 pw=0 time=5585 us)
8 TABLE ACCESS FULL TT (cr=1193 pr=0 pw=0 time=10073 us)
********************************************************************************
alter session set sql_trace=false
--==============================
--沒有index時訪問tt的邏輯讀是1193(上面query對應的值)而且訪問tt
使用的是全表掃面,下面在tt表的外來鍵上建立index看看效果...
SQL> create index idx_tt on tt(object_id) tablespace users;
索引已建立。
SQL> alter session set sql_trace=true;
會話已更改。
SQL> delete from t where object_id=4;
已刪除 1 行。
SQL> commit;
提交完成。
SQL> alter session set sql_trace=false;
會話已更改。
--==============================
delete from t
where
object_id=4
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.01 0.01 0 2 6 1
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.01 0.01 0 2 6 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYS
Rows Row Source Operation
------- ---------------------------------------------------
1 DELETE T (cr=4 pr=0 pw=0 time=11188 us)
1 INDEX UNIQUE SCAN PK_T (cr=2 pr=0 pw=0 time=26 us)(object id 12997)
********************************************************************************
delete from "SYS"."TT"
where
"OBJECT_ID" = :1
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 2 24 8
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.00 0.00 0 2 24 8
Misses in library cache during parse: 0
Optimizer mode: CHOOSE
Parsing user id: SYS (recursive depth: 1)
Rows Row Source Operation
------- ---------------------------------------------------
0 DELETE TT (cr=2 pr=0 pw=0 time=358 us)
8 INDEX RANGE SCAN IDX_TT (cr=2 pr=0 pw=0 time=53 us)(object id 13006)
--=================================
--有index時訪問tt的邏輯讀是2(上面query對應的值)而且訪問tt
使用的是INDEX RANGE SCAN IDX_TT,很顯然效果非常好.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1039622/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 和外來鍵相關的阻塞和死鎖問題總結
- mysql相關問題總結MySql
- OC UI總結之--tableview相關用法和問題UIView
- 【總結】日常遇到的一些問題相關知識
- oracle外來鍵約束的總結Oracle
- Hadoop/Spark相關面試問題總結HadoopSpark面試
- HTTPS總結+相關面試問題解答HTTP面試
- 演算法問題總結-連結串列相關演算法
- vim 命令 快捷鍵以及相關總結
- TCP相關面試題總結TCP面試題
- 總結 MySQL 相關知識點MySql
- JVM相關知識點總結JVM
- 和分割槽表相關的一點總結
- PHP物件相關知識點的總結PHP物件
- ORACLE使用 DBCA 重建ASM磁碟組的相關問題總結OracleASM
- Python字串關鍵點總結Python字串
- Android 軟鍵盤相關問題Android
- 父表修改與外來鍵的關係(主鍵DML與外來鍵的關係)
- MySQL的主鍵和欄位型別問題總結MySql型別
- 文字匹配相關方向打卡點總結
- Oracle 11g RAC之HAIP相關問題總結OracleAI
- Django(15)外來鍵和表關係Django
- 滑動視窗相關的題目總結
- 一篇關於熱點交流話題的總結和續集。
- 關於網友的獲取MSSQL外來鍵資訊的問題的探討SQL
- ImageView相關------ ScaleType講解和Metrix控制(總結用來速查)View
- Oracle 外來鍵索引影響阻塞問題Oracle索引
- 效能測試關注點整理總結
- 陣列效能問題分析總結陣列
- Java關於初始化問題的總結(一)Java
- 關於ORACLE的一點總結Oracle
- 有關role的一點總結!
- oracle net相關問題的彙總和解決Oracle
- 關於外來鍵的理解和實驗步驟
- ZooKeeper和Curator相關經驗總結
- 伺服器硬體問題整理的一點總結伺服器
- 【學習圖片】02:關鍵效能問題
- 關於move tablespace的問題總結