oracle外來鍵索引解決父表鎖定問題
對於有外來鍵約束的表,對子表執行DML操作時,會鎖住父表,對於併發要求高的系統,會帶來很大效能問題,
有時候透過在外來鍵列上建B樹索引,可以減小鎖定。
1、建測試表
create table student(id number(8) primary key,st_name varchar2(32),class_id number(8));
create table class (class_id number(8) primary key,class_name varchar2(32));
alter table student add constraint stu_fk1 foreign key (class_id) references class(class_id);
2、插入資料
insert into class values(2,'高一');
insert into class values(3,'高二');
insert into class values(4,'高三');
insert into class values(2,'高一');
commit;
insert into student values(001,'liujun',2);
insert into student values(002,'liu1',2);
insert into student values(003,'liu2',2);
commit;
3、主表刪除記錄
session1:
delete from student where class_id=2; --執行成功
session2:
delete from class where class_id=3; --session2 等待session1提交事務
4.外建上建索引
create index class_fk1 on student(class_id);
session1:
delete from student where class_id=2; --執行成功
session2:
delete from class where class_id=3; --session2 執行成功。
5、測試結果
在資料庫設計時,存在1對1和1對多的表,儘量設計主外來鍵約束,並在外來鍵列上建B樹索引,多查詢效能會有很大提高,且會減少鎖定,提高併發效率。
有時候透過在外來鍵列上建B樹索引,可以減小鎖定。
1、建測試表
create table student(id number(8) primary key,st_name varchar2(32),class_id number(8));
create table class (class_id number(8) primary key,class_name varchar2(32));
alter table student add constraint stu_fk1 foreign key (class_id) references class(class_id);
2、插入資料
insert into class values(2,'高一');
insert into class values(3,'高二');
insert into class values(4,'高三');
insert into class values(2,'高一');
commit;
insert into student values(001,'liujun',2);
insert into student values(002,'liu1',2);
insert into student values(003,'liu2',2);
commit;
3、主表刪除記錄
session1:
delete from student where class_id=2; --執行成功
session2:
delete from class where class_id=3; --session2 等待session1提交事務
4.外建上建索引
create index class_fk1 on student(class_id);
session1:
delete from student where class_id=2; --執行成功
session2:
delete from class where class_id=3; --session2 執行成功。
5、測試結果
在資料庫設計時,存在1對1和1對多的表,儘量設計主外來鍵約束,並在外來鍵列上建B樹索引,多查詢效能會有很大提高,且會減少鎖定,提高併發效率。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27571661/viewspace-1792607/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 外來鍵索引影響阻塞問題Oracle索引
- Oracle 解決鎖表問題Oracle
- oracle查詢表資訊(索引,外來鍵,列等)Oracle索引
- enq: TM - contention解決之道——外來鍵無索引導致鎖爭用ENQ索引
- oracle 鎖問題的解決Oracle
- enq: TM - contention解決之道——外來鍵無索引導致鎖爭用(上)ENQ索引
- enq: TM - contention解決之道——外來鍵無索引導致鎖爭用(下)ENQ索引
- 父表修改與外來鍵的關係(主鍵DML與外來鍵的關係)
- oracle鎖表問題Oracle
- 表外來鍵未加索引之處理索引
- 兩表互為外來鍵的解決方案
- 解決Oracle死鎖問題步驟Oracle
- ORACLE: 查詢(看)表的主鍵、外來鍵、唯一性約束和索引Oracle索引
- Oracle觸發器死鎖問題解決Oracle觸發器
- 和外來鍵相關的阻塞和死鎖問題總結
- mysql innodb 索引失效問題引起表級鎖MySql索引
- 10.30 索引,外來鍵索引
- 關於主外來鍵關係DML父表和DML子表加鎖方式
- oracle 解鎖的問題Oracle
- Oracle定義約束 外來鍵約束Oracle
- 解決資料庫的索引亂碼問題,先刪除外來鍵約束,再刪除主鍵約束及其索引資料庫索引
- 解決無法刪除表,提示被外來鍵約束引用
- Oracle查詢表的外來鍵引用關係Oracle
- 外來鍵缺索引檢查指令碼索引指令碼
- 查詢沒有索引的外來鍵索引
- 查詢(看)表的主鍵、外來鍵、唯一性約束和索引索引
- openldap+NFS 鎖問題解決LDANFS
- Oracle GoldenGate 針對表沒有主鍵或唯一索引的解決方案OracleGo索引
- Oracle GoldenGate 針對表沒有主鍵或唯一索引的解決方案OracleGo索引
- openGauss-外來鍵鎖增強
- 解決Oracle11g中的索引名字亂碼問題Oracle索引
- 通過在Oracle子表外來鍵上建立索引提高效能Oracle索引
- Mysql truncate table時解決外來鍵關聯MySql
- Oracle資料表死鎖的解決方法Oracle
- Oracle的鎖表與解鎖Oracle
- SQLserver 程式被死鎖問題解決SQLServer
- oracle中查詢、禁用、啟用、刪除表外來鍵Oracle
- Oracle 外來鍵查詢sqlOracleSQL