작성
·
164
0
안녕하세요 incu님, 강의 잘 듣고있습니다.
인덱스 면접대비하기 부분에서 2가지 질문이 있습니다.
첫번째, MySQL 인덱스의 자료구조는 b-Tree
라고 하셨는데, b+Tree
아닌가요? b+Tree
의 개념을 포함해서 쓰신건지 궁금합니다.
두번째, 인덱스를 생성하고 그 인덱스를 WHERE 조건절에 사용했음에도 인덱스를 타지 않는 경우 중에 not eq
조건도 있는 것으로 알고있습니다. 이 경우에는 Table Full Scan하는 것이 맞는거죠? 아니면 not eq
조건에서 인덱스를 타지 않는데, 성능을 개선할 수 있는 방안이 어떤 것이 있는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
incu님, MySQL 인덱스와 관련된 두 가지 질문에 대해 답변 드리겠습니다.
첫 번째 질문에 대하여, 일반적으로 MySQL에서 사용하는 인덱스의 자료구조는 B+Tree
입니다. B-Tree
와 B+Tree
는 다르며, B+Tree
는 모든 데이터가 리프 노드에 있고, 브랜치 노드에는 인덱스 정보만 저장하는 구조로 되어 있어 MySQL에서는 B+Tree
인덱스를 주로 사용합니다. 강의에서 언급한 b-Tree
가 실제로는 B+Tree
를 의미하는 것인지 강의 내용을 확인해볼 필요가 있습니다.
두 번째 질문에 대하여, not equal
조건이 쿼리에 있을 경우 인덱스를 통한 검색보다는 전체 테이블 스캔을 하게 되는 경우가 많습니다. 인덱스는 등값(Equality) 조건에 최적화되어 있어서 not equal
조건에서는 효율적이지 않기 때문입니다. 하지만 성능을 개선하기 위해 비트맵 인덱스를 사용하거나, not equal
조건을 다른 쿼리 형태로 변경하여 사용할 수도 있으나 이는 DBMS의 종류와 데이터의 특성, 쿼리의 복잡성에 따라 달라질 수 있습니다. 실제로 MySQL에서는 비트맵 인덱스를 지원하지 않으므로, not equal
조건에 대한 성능 개선을 위해서는 쿼리를 최적화하거나 인덱스를 조정하는 등 다양한 시도를 할 수 있습니다.
incu님의 강의 학습에 도움이 되었기를 바랍니다. 추가적인 질문이나 도움이 필요하시면 언제든지 문의해 주세요.