데이터베이스 설계와 구축(개정판) (2009년)
FK인덱스 생성을 통한 성능 향상 0 0 41,888

by 구루비스터디 성능 데이터 모델링 [2019.08.11]


8.4 FK인덱스 생성을 통한 성능 향상

8.4.1 물리적인 테이블에 FK제약이 걸려있을 경우 인덱스 미생성으로 성능저하

  • 사원과 발령 테이블 사이에 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문장에 조인이 발생할 때 성능 저하를 예방할 수 있다.
"구루비 데이터베이스 스터디모임" 에서 2009년에 "데이터베이스 설계와 구축(개정판)" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4250

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입