데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
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 하는 것과 효율면에서 아무런 차이가 없다.