해결된 질문
작성
·
10
0
3-5 강의에서 클러스터드 인덱스와 논 클러스터드 인덱스, 그리고 커버링 인덱스에 대해 궁금한게 있어서 질문드립니다.
논 클러스터드 인덱스가 원본 데이터를 한 번 더 찾아야하니까 느리다고 하셨는데 만약 커버링 인덱스 상황이라면 한번 더 타고 들어가지 않으니까 무조건적으로 클러스터드 인덱스에 비해서 더 느리다고 하는게 맞는 것인지 의문이 들었습니다.
클러스터드 인덱스 외에 부분 칼럼들에 대해 만드는 모든 인덱스는 논 클러스터드 인덱스이며 이제 이렇게 자동으로 만들어지거나 직접 만든 클러스터드와 논 클러스터드 인덱스에 대해 상황별로 커버링 인덱스 상태인지 아닌지로 나뉜다고 이해하면 될까요?
답변 2
0
라이언님 좋은 질문 해주셔서 감사합니다!!
1. 커버링 인덱스 상황에서는 논클러스터드가 더 빠를 수 있습니다
질문 주신 관점이 정확합니다! 논클러스터드 인덱스가 항상 느린 건 아닙니다. 커버링 인덱스 상황이라면 오히려 논클러스터드 인덱스가 클러스터드 인덱스보다 빠를 수 있어요.
왜냐하면 논클러스터드 인덱스는 필요한 컬럼만 가지고 있어서 데이터 크기가 작거든요. 예를 들어볼게요.
사용자 테이블(id, name, email, address, phone, created_at, updated_at 등 10개 컬럼)에서 "name으로 검색해서 email만 조회"하는 쿼리가 있다고 하면
SELECT email FROM users WHERE name = '홍길동';
INDEX(name, email)을 만들어두면 이게 커버링 인덱스가 되는데, 이 경우 논클러스터드 인덱스만 읽어도 되니까 실제 데이터 페이지를 안 찾아가도 됩니다. 반면 클러스터드 인덱스는 모든 컬럼(10개)을 다 들고 있어서 데이터 크기가 더 크죠.
실제로 측정해보면 커버링 인덱스를 탄 논클러스터드 인덱스가 클러스터드 인덱스보다 30-50% 정도 빠른 경우도 많습니다. 왜냐하면 같은 메모리 공간에 더 많은 인덱스 데이터를 올릴 수 있거든요.
2. 인덱스 분류 체계에 대한 이해는 거의 정확합니다
말씀하신 대로 이해하시면 되는데, 조금만 더 정확하게 정리해드릴게요.
클러스터드 인덱스와 논클러스터드 인덱스는 "인덱스의 종류"이고, 커버링 인덱스는 "인덱스의 상태"입니다.
클러스터드 인덱스: 테이블당 1개만 존재 (보통 PK), 실제 데이터가 정렬된 상태
논클러스터드 인덱스: 여러 개 만들 수 있음, 인덱스 키 + PK 주소를 가짐
그리고 이 두 종류의 인덱스 모두 "커버링 인덱스 상태"가 될 수 있습니다. 커버링 인덱스는 "쿼리가 필요로 하는 모든 컬럼을 인덱스가 포함하고 있는 상황"을 말하는 거거든요.
예를 들어
SELECT * FROM users WHERE id = 1
→ 클러스터드 인덱스를 쓰는데, 이것도 커버링 인덱스 상태
SELECT email FROM users WHERE name = '홍길동'
→ INDEX(name, email)을 쓰면 논클러스터드 인덱스지만 커버링 인덱스 상태
정리하면 이렇게 이해하시면 됩니다
모든 인덱스는 "클러스터드" 또는 "논클러스터드" 중 하나
그 인덱스가 쿼리를 처리할 때 추가 데이터 조회 없이 해결되면 "커버링 인덱스 상태"
이런 개념을 실무에서 쓸 때는 EXPLAIN으로 실행 계획을 보면서 "Extra 컬럼에 Using index가 뜨는지"를 확인하면 됩니다. Using index가 뜨면 커버링 인덱스 상태로 동작하는 거거든요.
좋은 질문 감사합니다!! 좋은 주말 보내세요
0
안녕하세요, 인프런 AI 인턴입니다. 신나는 라이언님.
인덱스의 종류와 그 역할에 대한 질문을 주셨군요. 데이터베이스 인덱스의 구조와 작동 메커니즘은 시스템 성능 최적화에 있어서 매우 중요한 요소입니다. 각 인덱스의 특징과 상황별 사용 방법을 이해하는 것이 필요합니다.
클러스터드 인덱스 (Clustered Index):
논 클러스터드 인덱스 (Non-Clustered Index):
커버링 인덱스는 쿼리에 필요한 모든 컬럼 값이 인덱스에 포함되어 있을 때 사용하는 용어입니다. 이 경우, 추가적인 데이터 페이지에의 접근 없이 인덱스만으로 쿼리를 완전히 처리할 수 있습니다.
커버링 인덱스 상황에서는 데이터에 대한 직접적인 추가 접근이 필요하지 않기 때문에, 이러한 상황에서는 논 클러스터드 인덱스도 효율적으로 동작할 수 있습니다.
클러스터드 vs. 논 클러스터드 및 커버링 인덱스:
인덱스 구성:
기존에 질문된 유사한 내용이 있는 게시물을 참고하시어 더 깊은 이해를 원하시면 아래 링크를 참조해 보세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.