해결된 질문
작성
·
13
0
안녕하세요.
select * from article where board_id= 1 order by article_iddesc limit 30 offset 90;
해당 쿼리문을 날렸을 때의 문제점을 설명하는 부분에서 이해가 잘 가지 않는 부분이 있어 질문드립니다!
제가 기억하는 내용이 틀릴 수도 있어 질문드립니다!
제가 알고있던 바로는 Secondary index에 의해 만들어진 자료구조에서 leaft노드는 원본 데이터의 주솟값을 가진다고 알고있었습니다.
따라서 강의의 설명에서는 article id를 가지고 다시 clustered index를 통해 조회한다 했지만 바로 O(1)으로 원본 데이터에 접근한다는 이해는 틀린것일까요? 틀렸다면 어떤 부분일까요?
좋은 강의 잘 듣고있습니다! 감사드립니다!
학습 관련 질문을 최대한 상세히 남겨주세요!
고민 과정도 같이 나열해주셔도 좋습니다.
먼저 유사한 질문이 있었는지 검색해보세요.
인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
답변 2
0
dohyeong254님, 안녕하세요!
클러스터드 인덱스와 세컨더리 인덱스의 자료구조는 모두 트리로 이루어져 있습니다.
그리고 세컨더리 인덱스의 리프 노드는 원본 데이터에 접근할 수 있는 식별자, 즉 Primary Key를 가지고 있습니다.
실제 주솟값을 가진게 아닌, 논리적으로 포인터 역할을 하는 Primary Key를 통해 클러스터드 인덱스에서 데이터를 찾을 수 있는 것입니다. (주솟값 가진건 MyISAM 스토리지 엔진이랑 혼동하신 것 같기도 하네요!)
Primary Key로 클러스터드 인덱스에 접근하여 데이터를 찾아나가는 과정은,
트리의 시간복잡도 O(logN)의 시간이 필요합니다!
0
안녕하세요, 인프런 AI 인턴입니다. dohyeong254님.
질문하신 내용은 데이터베이스의 인덱스 작동 방식, 특히 Secondary Index와 Clustered Index의 관계 및 역할에 대한 부분입니다. 인덱스가 어떻게 작동하는지를 이해하는 것은 성능 최적화 측면에서 매우 중요합니다.
Secondary Index:
Clustered Index:
WHERE board_id = 1
조건 때문에, 해당 조건을 만족하는 레코드의 위치를 찾기 위해 Secondary Index를 활용합니다.이는 즉, Secondary Index가 실제 데이터를 직접적으로 탐색(접근)하기보다는 필요한 데이터를 가리키는 역할만을 한다는 것을 의미합니다. 데이터베이스는 이러한 과정을 통해 불필요한 전체 테이블 스캔을 피할 수 있으나, OFFSET
과 같이 많은 레코드를 건너뛰어야 하는 경우에는 여전히 성능 저하가 발생할 수 있습니다.
관련해서 인프런 커뮤니티에서 유사한 질문과 답변이 있으니, 참고하시면 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아 정말 감사드립니다!! 답변을 기반으로 더 찾아보고 공부하니 이제 완벽히 이해가 되었습니다!!
좋은 강의 감사드리고 빠른 답변 감사드립니다!! 좋은 하루 되시길 바라겠습니다 😊😊