PK 생성 전략의 '유니크 문자열 또는 숫자' 단점 부분 질문있습니다.
안녕하세요 ? 저도 정보를 얻고자 질문 게시판 돌아다니면서 흥미로운 질문이 있어서 대신 답변 남깁니다. . ! (수강생 입장이라 부정확할 수 있는 점 양해 부탁드려요)질문 주신 내용은 B+ Tree에서 데이터가 삽입되는 경우 (특히 정렬된 값이 아니라 랜덤한 값을 넣는 경우 페이지가 꽉 찬 상태가 아니더라도 페이지가 새로 생성될 수 있다) 그럴 것 같습니다 !왜냐하면 MySQL의 경우 B+ Tree의 데이터 단위가 기본적으로 16kb의 페이지 단위로 가지고 있는데B+ Tree를 정렬 상태를 유지해야 하므로 페이지가 꽉 차 있음 여부와 별개로 새로운 페이지를 추가해야 하는 상황이 있다면 페이지를 추가할 것 같습니다.그렇게 생각하는 이유는 다음과 같은데요. Page에 정해진 상한과 하한의 경계가 있을 수 있다.말씀하시는 데이터는 사실 리프 노드이고 이러한 리프 노드는 브랜치 노드에 의해서 분류가 됩니다.그런데 사실 브랜치 노드에 의해서 분류가 되기 때문에 결국 리프 노드에 값이 들어갈 수 있는 상한과 하한이 있을 수 있을 것 같습니다.따라서 이 내용은 페이지의 꽉 차 있음과 별개로 새로운 데이터를 생성할 수 있을 것 같습니다. AUTO INCREMENT 와 PK 유니크데이터가 항상 정렬된 순서로 삽입되는지가 중요한 것 같습니다.강의에서 소개된 SnowFlake 같은 경우 앞 12비트가 타임스탬프로 되어 있으므로 항상 정렬된 순서로 삽입될 확률이 높습니다.그래서 이해하신 내용을 더 엄밀하게 분류하면 항상 정렬된 데이터가 삽입되는지 (AUTO INCREMENT는 당연히 1씩 증가하므로 항상 정렬된 상태를 보장함) 정렬되지 않은 랜덤한 값이 삽입되는지가 더 중요한 여부일 것 같습니다 ! 결론위 내용을 토대로 다시 정리해 보면 정렬되지 않은 랜덤한 데이터가 삽입된다면 (유니크 문자열, 숫자와 별개로) 페이지가 꽉 차지 않더라도 새로운 페이지가 추가될 수 있을 것 같습니다. 그 이유는 리프 노드에 삽입되는 기준은 사실 브랜치 노드의 키값인데, B+ Tree의 동작 방식을 생각해보면 어떤 특정 리프 노드는 상한과 하한값을 가지고 있을 수 있는데 그렇기 때문에 페이지가 꽉참 여부와 별개로 새로운 페이지가 추가될 수 있음