DB에서 기본키를 업데이트하는 것은 가능하다.
그렇다면, 이렇게 하는 게 문제는 없을까?
퍼포먼스 측면에서는
해당 키를 외래키로 참조할 떄, 외래키도 모두 변경해야 한다.
만약, 이때 외래키에 인덱스가 안 걸려 있다면, 자식 테이블을 풀스캔해서 외래키를 찾아야 한다.
이 경우 무결성을 보장하기 위해서, 데이터베이스는 해당 자식 테이블에 잠금을 설정한다. 이 때문에 대기로 인해 데드락이 발생할 수 있다.
인덱스가 돼 있다면, 기존 인덱스 항목을 삭제하고 새 키값으로 인덱스에 새로운 항목을 삽입한다. 단순 테이블 업데이트보다 더 많은 비용이 들어가는 작업이다.
기본키는 데이터가 인덱스에 맞춰서 정렬되기 때문에, 데이터의 물리적인 위치도 바꿔줘야 하므로 더 많은 부하가 발생한다.