String으로 PK 만들때 Performance 높이는 한가지 방법
이번 글을 통해 배워 갈 내용
- GUID pk Performance in DB에 대한 생각 나눔
UUID를 쓰면 매년 10억개씩 100년 만들었을 때 중복이 나올 확률이 반반이기 때문에
UUID를 쓰면 모든 서버 모든 테이블에서 Unique 하고 데이터베이스에 record를 Merging 할 때 편합니다
IDX를 그대로 내리면 위험해서
저도 보안이 Critical 하지 않은 시스템의 경우
UUID를 Public id로 쓸 때가 있습니다
물론 철통보안의 경우 Publicid 테이블을 따로 만들어서 관리합니다
하지만 혹시 UUID를 Public Id로 내릴 필요가 없는 경우
그리고 UUID 만큼 랜덤함이 필요 없는 경우
GUID로 만드는 부분적으로 sequential 한 newsequentialid()를 쓰면 좋습니다
MSSQL에서 제공하는 기능이고요
테이블에 해당 GUID를 Insert 할 때 좋습니다.
말 그대로 Sequencial 하기 때문에 UUID 만큼 보안에 좋지는 않지만
UUID 보다 속도가 빠릅니다
칼럼 타입을 varchar 36에서 바꿔줘야 하는 단점도 있습니다.
참고로
DB가 자주 꺼진 다음 켜진다면 Sequencial 하게 생성 시 안 좋다고 합니다
그리고 백만 ROW까지는 괜찮은데 백만 ROW이상이라면 다른 방법을 찾아보는 것도 좋다고 합니다
자바에서 GUID를 생성할 때 읽어보면 좋은 흥미로운 글
https://stackoverflow.com/questions/32758726/sequential-guid-generation-in-java-with-sql-server-uniqueidentifier%EF%BB%BF
GUID를 생성하는 올바른 방법
http://www.opengroup.org/dce/info/draft-leach-uuids-guids-01.txt
POSTGRESSQL이라면 참조
https://dba.stackexchange.com/questions/175107/does-postgres-offer-a-feature-like-newsequentialid-in-ms-sql-server-to-make-uu
참조 및 인용
https://dba.stackexchange.com/questions/264/guid-vs-int-which-is-better-as-a-primary-key
http://web.archive.org/web/20110526141832/http://www.fotia.co.uk/fotia/DY.19.NewSequentialId.aspx
블로그 추천 포스트
https://codemasterkimc.tistory.com/50
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)