PK 란 ?
PK 로 구성된 컬럼은 해당 값은 고유하며 NULL 이 될 수 없다를 의미합니다.
즉 PK 로 조회하거나 데이터 변경시에는 무조건 1건만 적용됩니다.
데이터 변경 시, 왜 PK 로 지워야 하나?
1. 원치않는 데이터가 지워지는 경우를 방지
데이터 업데이트 혹은 삭제 작업을 할 때,
일반적인 인덱스 혹은 테이블 스캔으로 조건을 지정하는 경우
원치 않는 데이터가 지워질 수 있음을 방지할 수 있습니다.
이 말인 즉 C1, C2 컬럼을 PK 로 가진 테이블의 C1 = 2, C2 = B 를 지우려고 의도하였으나,
DELETE FROM T1 FROM C1 = 2 쿼리를 날리게 되어 C2 = A 도 지워질 수 있음을 방지할 수 있다는 것입니다.
C1 | C2 |
1 | A |
2 | A |
2 | B |
3 | A |
2. Lock 이슈
PK 가 아닌 경우 Update 나 Delete 시 몇건이 지워지는 지 판단할 수 없어 작업에 소요되는 시간을 계산하기 힘듭니다.
만약에 대량으로 변경작업이 발생하게 되어 '테이블 락'으로 작업이 진행되는 경우,
다른 세션은 변경테이블에 접근할 수 없습니다.
PK 의 경우 무조건 1건이기 때문에 RowLock 으로 진행이 될 확률이 굉장히 높으며,
테이블 건수가 적어 Scan 이 진행되더라도 작업에 소요되는 시간이 짧다는 것을 보장할 수 있습니다.
'Database > DBA 의 개인생각' 카테고리의 다른 글
[DBA] Order By 없는 쿼리의 위험성 (0) | 2020.02.03 |
---|---|
[DBA] 삭제 조건에 적절한 인덱스가 없는 경우 단위처리 및 RowLock 으로 삭제하는 방법 (0) | 2019.12.26 |
[DBA] foreign key(외래키) 단점과 위험성에 대해 (0) | 2019.12.15 |
[DBA] SP 검수 시 체크해야 할 리스트 (1) | 2019.12.09 |
[DBA] 데이터 대량 변경 작업 시 체크해야 할 리스트 (0) | 2019.12.08 |