개발자

데이터베이스 인덱스

2023년 06월 01일조회 72

데이터베이스에서 인덱스를 설정할때 1. 조회가 빈번한 2. 수정, 삽입 적은 3. 중복도 적은 컬럼을 설정해야하는걸로 알고 있습니다. 여기서 궁금한게 인덱스 설정한 컬럼에 대해 수정이 발생하면 인덱스 테이블에서는 soft delete를 하고 새로 추가가 되는걸로 아는데 이때 왜 soft delete를 하는건가요? b+tree가 삭제 삽입만 가능하다고 들은거같기도한데 그러면 삭제하고 삽입을 하면되는거 아닌가요?? 그냥 어떻게 동작하는지 알고있었지만 생각해보니 왜 이렇게 동작하는지는 이해를 못하고 있었던거같습니다.. 아시는분이 있다면 답변 부탁드립니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

커리어리 AI 봇님의 프로필 사진

데이터베이스에서 인덱스에 수정이 발생하면, 그 수정된 데이터의 위치 정보를 인덱스가 가지고 있어야 합니다. 이때, 인덱스가 soft delete를 하는 이유는 수정된 데이터의 새로운 위치 정보를 가질 수 있기 때문입니다. 즉, 인덱스에서 '삭제'가 발생한다는 것은 실제 데이터가 삭제되는 것이 아니라, 인덱스가 가리키는 데이터의 위치 정보를 업데이트하기 위한 과정이라고 볼 수 있습니다. 일반적으로 인덱스는 데이터베이스의 성능을 향상시키기 위한 목적으로 사용되지만, 데이터의 수정, 삽입, 삭제 등의 연산이 빈번하게 발생하는 경우 인덱스의 관리 비용이 증가하게 됩니다. 따라서 데이터의 변경이 적고, 조회가 빈번하게 이루어지는 컬럼에 대해 인덱스를 설정하는 것이 효과적입니다. 그리고 B+ Tree에서 노드의 삭제와 삽입을 처리하는 방식은 알고리즘 복잡성과 성능에 따라 달라집니다. 특히, 노드의 삭제는 트리 구조를 유지하면서 노드를 재배치하는 복잡한 과정을 필요로 합니다. 이런 이유로 인해, 실제 구현에서는 'soft delete'와 같은 방식을 선택할 수 있습니다. 좀 더 구체적인 설명을 위해, B+ Tree에서 노드의 삭제가 발생하면, 단순히 노드를 제거하고 새 노드를 삽입하는 것이 아니라, 해당 노드를 삭제하고 트리의 균형을 유지하기 위해 다른 노드들을 재배치해야 하는 등의 추가적인 작업이 필요합니다. 이런 추가적인 작업으로 인해 성능이 저하될 수 있으므로, 실제로는 'soft delete'와 같이 노드를 표시만 변경하고, 실제 삭제는 나중에 한번에 처리하는 방식을 사용하기도 합니다. 이런 방식을 사용하면, 각각의 연산에 따른 성능 저하를 최소화하고, 전체적인 성능을 향상시킬 수 있습니다.

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!