인프런 커뮤니티 질문&답변
풀 인덱스 스캔 질문있습니다.
작성
·
95
0
CREATE INDEX idx_name ON users (name);
EXPLAIN SELECT * FROM users
ORDER BY name LIMIT 10; <- 이 부분에서 idx_name을 안쓰고 컬럼명만 작성했는데 어떻게 풀 인덱스 스캔을 썼는지 아는건가요?
답변 2
0
안녕하세요 zzzzz님! 확실한 답변을 드리기 위해 질문 한가지만 드리도록 할게요~!!
이 부분에서 idx_name을 안쓰고 컬럼명만 작성했는데 어떻게 풀 인덱스 스캔을 썼는지 아는건가요?
-> 이 질문에서 SQL문에서 idx_name을 명시해서 안 썼는데 어떻게 인덱스를 활용했는 지가 궁금하신 게 맞으실까요~??
CREATE INDEX idx_name ON users (name);
위 SQL문을 해석하자면 users 테이블의 name 컬럼에 대해
인덱스를 생성하는 명령어입니다.
이 때, 인덱스의 이름을 idx_name으로 지을 뿐이지,
실제로는 name 컬럼에 대해 인덱스가 생성됩니다!
이 때문에 아래 SQL문의 name 컬럼을 기준으로 인덱스를 활용하게 된 것입니다.
EXPLAIN SELECT * FROM users
ORDER BY name LIMIT 10;
여기서 이해 안 되시는 점 있으시면 추가로 댓글 달아주세요~~
0
안녕하세요, 인프런 AI 인턴입니다. zzzzz님이 제기하신 질문에 대해 답변 드리겠습니다.
이 상황은 SQL 쿼리에서 인덱스를 활용하는 방식과 관련된 질문입니다. EXPLAIN을 사용하여 쿼리 실행 계획을 확인할 때, 특정 인덱스를 명시적으로 지정하지 않았다 하더라도 MySQL은 데이터베이스에 생성된 인덱스를 자동으로 활용할 수 있습니다.
설명:
인덱스 자동 활용: MySQL은 쿼리를 최적화하기 위해 가능하다면 자동으로 테이블에 생성된 인덱스를 활용합니다. 이 경우
CREATE INDEX idx_name ON users (name);구문에 의해 생성된 인덱스가 자동으로 사용될 확률이 높습니다. 즉,ORDER BY name조건이 주어지면,name컬럼에 대한 인덱스가 생성되어 있는 경우 MySQL은 이를 자동으로 식별하고 인덱스를 활용하여 정렬 작업을 효율적으로 수행합니다.풀 테이블 스캔 vs 풀 인덱스 스캔: 풀 테이블 스캔 대신 인덱스를 통해 직접 데이터를 정렬할 수 있다면 MySQL은 이를 통해 성능을 개선합니다.
LIMIT조건도 추가되어 있으므로, 필요한 범위의 데이터만 제한적으로 읽어들이며 인덱스를 통한 풀이 가능합니다.
관련하여 인덱스와 실행 계획 최적화에 대한 추가 정보를 아래 링크에서 확인할 수 있습니다:
- WHERE A OR B 에서 인덱스 걸기: 이 게시물은 인덱스의 사용 방식과 효율성에 대한 설명을 포함하고 있어 이해에 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





네~