Inflearn コミュニティ Q&A
category_path 테이블에서 idx_descendant 인덱스를 생성하는 이유가 궁금합니다
作成
·
18
·
編集済み
0
안녕하세요~! 영한님
category_path 를 생성하는 과정에서 idx_descendant 인덱스를 생성하는데요.
descendant_id 는 외래키로 설정해서 인덱스가 자동으로 생성되지 않나요?!
아래 쿼리를 실행했을 때 index 가 생성되는 것을 확인 했습니다!
create table category_path (
ancestor_id bigint not null, -- 조상 노드
descendant_id bigint not null, -- 자손 노드
depth int not null, -- 거리 (깊이 차이)
primary key (ancestor_id, descendant_id),
foreign key (ancestor_id) references category_closure(category_id),
foreign key (descendant_id) references category_closure(category_id)
);
create index idx_depth on category_path(depth);
show indexes from category_path;
create index idx_descendant on category_path(descendant_id);위와 같이 명시적으로 인덱스를 생성한 이유가 있을까요?
감사합니다.
回答 2
0
안녕하세요. 개발하는쿼카님
이 인덱스가 부분이 중요한 내용이라, 여기서는 인덱스의 이름을 명시적으로 지정해주기 위해서 직접 사용했습니다 🙂
인덱스의 이름을 명시적으로 지정하거나, 인덱스의 조건을 좀 더 다르게(역방향 등등) 주고 싶다면 인덱스를 직접 만들면 됩니다. 물론 FK 인덱스와 중복으로 만들어지지는 않고, 명시적으로 지정한 인덱스가 사용됩니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 개발하는쿼카님.
category_path 테이블에서 descendant_id에 대해 idx_descendant 인덱스를 명시적으로 생성한 이유에 대해서 궁금하신 점 아주 흥미로운 질문입니다.
외래키 제약 조건을 설정할 때, 데이터베이스는 자동으로 인덱스를 생성하지는 않습니다. 기본적으로 외래키 자체에는 인덱스 생성이 포함되지 않으므로, 쿼리 성능을 최적화하기 위해 수동으로 인덱스를 설정하는 것이 일반적입니다. 이는 특히 데이터의 조회가 많고, descendant_id를 기준으로 검색하는 경우 인덱스가 큰 도움을 줄 수 있습니다.
보다 구체적으로는, descendant_id에 대해 자주 검색하거나 조작 작업(예: JOIN 조건으로 활용)이 일어날 경우 인덱스가 추가적인 성능 향상을 줄 수 있습니다. 쿼리가 많아질 수록 인덱스의 유무는 효율성에 큰 영향을 미칠 수 있습니다.
추가적인 배경 및 자세한 이해를 돕기 위해 다양한 간단한 테스트를 통해 인덱스가 검색, 삽입 성능에 미치는 영향을 직접 확인하시길 추천드립니다. 직접 실험해 보시면서 성능 차이를 체감하실 수 있을 것입니다.
관련된 추가적인 정보를 원하신다면, Category의 parent_id 생성 관련 질문과 답변을 확인하시면 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




