和外來鍵相關的一點效能問題總結!
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
- Hadoop/Spark相關面試問題總結HadoopSpark面試
- HTTPS總結+相關面試問題解答HTTP面試
- oracle外來鍵約束的總結Oracle
- 總結 MySQL 相關知識點MySql
- JVM相關知識點總結JVM
- Oracle 11g RAC之HAIP相關問題總結OracleAI
- 文字匹配相關方向打卡點總結
- 一篇關於熱點交流話題的總結和續集。
- Django(15)外來鍵和表關係Django
- 陣列效能問題分析總結陣列
- 滑動視窗相關的題目總結
- 主鍵和外來鍵
- 【學習圖片】02:關鍵效能問題
- 與堆和堆排序相關的問題排序
- Ajax 相關總結
- k8s 相關問題彙總K8S
- 關於2024省賽的總結和我的當下問題和未來訓練計劃
- nodejs實現微信小程式支付功能及相關問題總結NodeJS微信小程式
- Laravel 學習總結二:get () 和 first () 的區別、@each () 的用法和新增外來鍵約束Laravel
- iOS RunLoop 總結以及相關面試題解答iOSOOP面試題
- JavaScript跨域相關的總結JavaScript跨域
- JavaScript作用域相關的總結JavaScript
- Springmvc相關配置總結SpringMVC
- vue原理相關總結Vue
- java Set相關總結Java
- java List相關總結Java
- java Map相關總結Java
- electron相關問題
- django相關問題Django
- Docker 相關問題Docker
- octomap相關問題
- 新的主鍵和外來鍵的語法
- Entity Framework 實體載入外來鍵屬性的問題Framework
- 關於外來鍵約束
- 一類子樹問題的總結
- 關於盒模型相關的問題模型
- 關於v-for的一點小總結
- 相機成像相關知識總結