커버링 인덱스와 랜덤i/o 질문
72
3 asked
[질문 템플릿]
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가 발생하는건지 궁금합니다.
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
주민규님께서 질문하신 커버링 인덱스와 랜덤 I/O에 관한 내용은 데이터베이스 최적화의 중요한 부분입니다. 아래는 관련된 설명과 추가적인 정보입니다.
쿼리 성능과 랜덤 I/O
커버링 인덱스의 개념: 커버링 인덱스는 쿼리가 필요한 모든 데이터를 인덱스에서 바로 가져올 수 있을 때 사용됩니다. 즉, 테이블의 데이터 행을 참조할 필요가 없도록 만드는 인덱스입니다. 이렇게 되면 인덱스 내에서만 필요한 정보가 주어지기 때문에, 디스크 I/O를 최소화하여 성능이 향상됩니다.
랜덤 I/O 발생 상황: 주민규님께서 언급하신 예시에서
EXPLAIN쿼리에Using index condition이 나왔다는 것은 인덱스를 활용한 조회이지만, 선택한 컬럼들이 커버링 인덱스를 완전히 만족하지 않는다는 것을 의미합니다.item_id컬럼은 Primary Key로 인덱스가 설정되어 있고,price도 인덱스가 있다 하더라도,EXPLAIN에서Using index condition이 표시된다는 것은 인덱스에서WHERE조건은 처리하되, 선택된 컬럼들(item_id,price,item_name)이 인덱스만으로 커버되지 않아 원래 테이블 데이터를 읽기 위해 추가 디스크 접근(Random I/O)이 필요하다는 것을 뜻합니다.
이에 참고하실 내용으로 인프런 질문 게시판에는 인덱스 사용에 대한 질문이 있습니다!와 같은 관련 논의가 있습니다. 이러한 인덱스와 최적화 문제는 데이터베이스 설계 시 매우 주의가 필요합니다. 이와 같은 내용들은 실습을 통해 직접 경험하면서 이해도를 높이실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
간단한 오타 제보입니다.
0
19
1
ON을 명시하지 않았을 경우 질문드립니다.
0
62
1
강의 2:53 union을썼는데도 션이 중복
0
60
1
where 대신 having을 써도 되나요?
0
83
1
주문 내역에 대한 고객 데이터
0
65
2
in 수행
0
45
1
외부조인1 강의 관련 질문
0
76
3
오타인거죠?
0
81
1
섹션 3 퀴즈 3번 문제
0
78
2
GROUP BY 기준 컬럼
0
88
1
질문이 있습니다
0
56
1
오타
0
83
2
실제 상용 서비스 질문
0
100
1
파티셔닝 관련 질문입니다.
0
61
1
join 문제 풀이2 문제1(self join) 질문
0
67
1
9. 인덱스2.pdf 중에서
0
80
1
문제 2번
0
68
2
문제와 풀이1 - 3번 문제
-1
72
2
잘 사용하진 않지만 풀 외부 조인을 사용하신 사례가 궁금합니다!
0
94
1
[58. 인덱스와 정렬]을 듣다가 질문입니다.
0
95
2
두개 이상의 테이블을 조인할때 인덱스 질문이 있습니다.
0
61
1
파일을 만드는 단위가 궁금해요
0
74
1
MySQL은 실무에서 사용하는 케이스도 있을까요?
0
84
1
JOIN 방향에 따른 결과 행수와 효율적 데이터 조회 방법 질문
0
79
1

