oracle外來鍵索引解決父表鎖定問題

OGG-01161發表於2015-09-06
    對於有外來鍵約束的表,對子表執行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樹索引,多查詢效能會有很大提高,且會減少鎖定,提高併發效率。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27571661/viewspace-1792607/,如需轉載,請註明出處,否則將追究法律責任。

相關文章