강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

주민규님의 프로필 이미지
주민규

작성한 질문수

김영한의 실전 데이터베이스 - 기본편

커버링 인덱스

커버링 인덱스와 랜덤i/o 질문

작성

·

20

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

primary key 로 where 절에 넣고 select 를 하면 key 에 primary 가 찍혀 효율적인 조회가 가능하다고 알고있습니다!

그런데 수업 내용에서 EXPLAIN SELECT item_id, price, item_name FROM items WHERE price BETWEEN 50000 AND 100000; 해당 쿼리를 사용하면 extra 에 Using index condition 나와 인덱스를 사용해서 구했다 < 까지는 이해가 가는데 여기서 item_id 라는 primary key 가 존재하는데 이거로 db 접글을 재시도하면 어째서 랜덤i/0가 발생하는건지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

주민규님께서 질문하신 커버링 인덱스와 랜덤 I/O에 관한 내용은 데이터베이스 최적화의 중요한 부분입니다. 아래는 관련된 설명과 추가적인 정보입니다.

쿼리 성능과 랜덤 I/O

  1. 커버링 인덱스의 개념: 커버링 인덱스는 쿼리가 필요한 모든 데이터를 인덱스에서 바로 가져올 수 있을 때 사용됩니다. 즉, 테이블의 데이터 행을 참조할 필요가 없도록 만드는 인덱스입니다. 이렇게 되면 인덱스 내에서만 필요한 정보가 주어지기 때문에, 디스크 I/O를 최소화하여 성능이 향상됩니다.

  2. 랜덤 I/O 발생 상황: 주민규님께서 언급하신 예시에서 EXPLAIN 쿼리에 Using index condition이 나왔다는 것은 인덱스를 활용한 조회이지만, 선택한 컬럼들이 커버링 인덱스를 완전히 만족하지 않는다는 것을 의미합니다. item_id 컬럼은 Primary Key로 인덱스가 설정되어 있고, price도 인덱스가 있다 하더라도, EXPLAIN에서 Using index condition이 표시된다는 것은 인덱스에서 WHERE 조건은 처리하되, 선택된 컬럼들(item_id, price, item_name)이 인덱스만으로 커버되지 않아 원래 테이블 데이터를 읽기 위해 추가 디스크 접근(Random I/O)이 필요하다는 것을 뜻합니다.

이에 참고하실 내용으로 인프런 질문 게시판에는 인덱스 사용에 대한 질문이 있습니다!와 같은 관련 논의가 있습니다. 이러한 인덱스와 최적화 문제는 데이터베이스 설계 시 매우 주의가 필요합니다. 이와 같은 내용들은 실습을 통해 직접 경험하면서 이해도를 높이실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

주민규님의 프로필 이미지
주민규

작성한 질문수

질문하기