FK가 걸린 컬럼을 작업 시,
1. nocheck를 사용하여 disable 시키고 작업 후에 check 하는게 좋아 보이는데요.
2. FK를 drop constraint하고 작업 후에 add constraint하는 방법과
효율면에서 어떤 차이가 있는지 아시는분 있으신가요?
FK가 걸린 컬럼을 작업 시,
1. nocheck를 사용하여 disable 시키고 작업 후에 check 하는게 좋아 보이는데요.
2. FK를 drop constraint하고 작업 후에 add constraint하는 방법과
효율면에서 어떤 차이가 있는지 아시는분 있으신가요?
개인적으로는 개발 단계에서도 FK를 유지하는 것을 선호합니다만, 편의상 비활성화하고 사용하셔야한다면 어느 방법을 사용하더라도 효율성의 차이는 없다고 보입니다.
다만.. 데이터가 많이 적재되어 있을 경우 1번의 방법이 부하가 적습니다.
다시 enable 할 때.. 기존에 적재된 데이터의 정합성을 체크하지 않기 때문인데.. 그렇다고 이 방법이 좋다고만 얘기할 수는 없습니다.
왜냐하면 FK에 대한 IsTrustWorthy값이 No가 되기 때문에, 옵티마이저에게 안좋은 영향을 줄 수 있기 때문입니다.
FK를 enable할 때 IsTrustWorthy를 Yes로 만드려면.. alter table [테이블 이름] with check check constraint [FK 이름] 과 같이.. with check 옵션을 넣어야하고.. 이 방식을 권해드립니다. (이렇게하면 성능적으로는 drop constraint 후 add constraint 하는 것과 동일하겠죠)
제 생각으로는..
1. 가능하다면 FK는 계속 유지하는 것이 좋다.
2. FK를 disable했다면 enable할 때 with check 옵션을 사용한다.
3. 결국 drop 후 add 하는 것과 효율면에서 아무런 차이가 없다.