사원과 발령 테이블 사이에 FK에 의한 참조 무결성 제약조건이 걸려 있고, 사원 데이터를 삭제할 때 DBMS 내부적으로 발령 테이블에 있는 데이터까지 삭제라려고 하면 다음과 같이 발령테이블을 풀 테이블 스캔(Full Table Scan)이 발생된다.
그림 8-14는 사원번호가 FK 연쇄 삭제 제약이 걸려 있음에도 불구하고, FK가 있는 테이블에 사원번호 인덱스가 없어서 테이블 전체에 대해 풀 테이블 스캔이 발생한 경우다. 풀 테이블 스캔이 발생했기 때문에 당연히 테이블의 레코드 수가 많을 수록 성능이 저하된다. 이와같은 경우 FK 인덱스를 생성하면 그림8-15와 같이 데이터를 삭제할 수 있을것이다.
8.4.2 물리적인 테이블에 FK제약이 걸려있지 않을 경우 인덱스 미생성으로 인한 성능저하
물리적인 테이블에 FK를 사용하지 않아도 데이터 모델 관계에 의해 상속받은 FK속성들은 SQL WHERE절에서 조인으로 쓰인느 경우가 많으므로 FK인덱스를 생성해야 성능이 좋은 경구가 많다.
그림 8-16은 학사기준과 수강신청에 대한 데이터 모델이다. 물리적인 테이블에는 두 테이블 사이에 FK참조무결성 관계가 걸려있지 않는다고 가정한다. 또한 학사기준에는 데이터가 5만건이 있고, 수강신청에는 데이터가 500만 건이 있다고 가정하자.
비록 수강신청 테이블에 있는 학사기준번호가 SQL WHERE절에 비교자로 들어오지는 않지만, 수강신청 테이블에 상속받은 학사기준번호에 대해 인덱스를 생성하지 않으므로 학사 기준과 수강신청 테이블이 조인되면서 500만 건의 수강신청 테이블에 풀 테이블스캔이 발생되어 성능이 저하되었다. 이때는 수강신처 테이블에 FK인덱스를 생성하여 성능을 개선할수 있다.
비록 물리적으로 학사기준과 수강신청이 연결디어 있지 않다고 하더라도 학사기준으로부터 상속받은 FK에 대해 FK인덱스를 생성함으로써 SQL문장에 조인이 발생할 때 성능 저하를 예방할 수 있다.