인덱스 관련 질문 드립니다
예를 들어 emp 테이블과 dept 테이블을 조인한다고 하였을때
연결고리는 emp.deptno = dept.deptno 로 되는데
이때 deptno 는 각각 emp 테이블은 fk, dept 테이블은 pk 로 잡혀있습니다
scott 계정의 샘플에서는 위와 같이 잡혀있는데
조인이되는 연결고리는 서로 인덱스로 잡혀있는 것이 좋다고 들었습니다
실무에서는 어떤식으로 하시는지 알고 싶습니다 연결고리가 되는 fk 컬럼을 인덱스를 주는것이 맞는지요?
그리고 주는 것이 맞다면 왜 scott계정은 왜 fk에 인덱스지정을 해놓지 않았는지도 궁금합니다
1. 제가 아는 지식으로는 실무에서는 데이타의 정합성이 아주 중요한 Parent-Child 관계인 경우에만 FK 사용 권장하고요, 그렇지 않으면, FK 사용 권장 하지 않습니다.
(참고로 제가 일하고 있는 모쇼핑몰 site는 FK 사용하지 않습니다. - 데이터 정합성도 중요하지만, 더중요한 것은 성능이죠. 그리고 FK때문에 update시 Lock 이라도 걸리면 큰일이죠.)
2. 연결고리가 되는 부분은 가능하면 Index 있어야 되겠습니다. Index 가 없으면, Oracle Optimizer가 선택할 수 있는 것은 해당 table 의 full scan 뿐이겠죠.
3. >>주는 것이 맞다면 왜 scott계정은 왜 fk에 인덱스지정을 해놓지 않았는지도 궁금합니다
제 생각에는 건수가 얼마 없어서 아닐까요. 건수가 얼마 없다면 Index가 잡혀 있어도 타지 않을 가능성 있습니다.
답변 감사드립니다
한가지만 더 질문 드리겠습니다
개발된 DB 중에서 보면 FK를 사용하지 않고 PK로 올려 복합키로 생성하는 경우가 있던데
dept, emp 테이블로 예를 들면 dept(pk:deptno), emp(pk:deptno, empno) 이런식입니다
비교가 dept 와 emp 테이블이라 이상합니다만...
보통의 경우 이렇게 올려서 하는지
아니면 원래의 emp, dept 테이블처럼 dept(pk:deptno), emp(pk:empno) 이렇게만 하고 FK를 잡
지 않고 emp.deptno에 인덱스만 주어서 실무에서 쓰는지 궁금합니다
감사합니다