인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

zzzzz님의 프로필 이미지

작성한 질문수

비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편)

풀 인덱스 스캔 질문있습니다.

작성

·

49

0

CREATE INDEX idx_name ON users (name);

EXPLAIN SELECT * FROM users

ORDER BY name LIMIT 10; <- 이 부분에서 idx_name을 안쓰고 컬럼명만 작성했는데 어떻게 풀 인덱스 스캔을 썼는지 아는건가요?

 

답변 2

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 zzzzz님! 확실한 답변을 드리기 위해 질문 한가지만 드리도록 할게요~!!

 

이 부분에서 idx_name을 안쓰고 컬럼명만 작성했는데 어떻게 풀 인덱스 스캔을 썼는지 아는건가요?

-> 이 질문에서 SQL문에서 idx_name을 명시해서 안 썼는데 어떻게 인덱스를 활용했는 지가 궁금하신 게 맞으실까요~??

zzzzz님의 프로필 이미지
zzzzz
질문자

네~

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

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 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. zzzzz님이 제기하신 질문에 대해 답변 드리겠습니다.

이 상황은 SQL 쿼리에서 인덱스를 활용하는 방식과 관련된 질문입니다. EXPLAIN을 사용하여 쿼리 실행 계획을 확인할 때, 특정 인덱스를 명시적으로 지정하지 않았다 하더라도 MySQL은 데이터베이스에 생성된 인덱스를 자동으로 활용할 수 있습니다.

설명:

  1. 인덱스 자동 활용: MySQL은 쿼리를 최적화하기 위해 가능하다면 자동으로 테이블에 생성된 인덱스를 활용합니다. 이 경우 CREATE INDEX idx_name ON users (name); 구문에 의해 생성된 인덱스가 자동으로 사용될 확률이 높습니다. 즉, ORDER BY name 조건이 주어지면, name 컬럼에 대한 인덱스가 생성되어 있는 경우 MySQL은 이를 자동으로 식별하고 인덱스를 활용하여 정렬 작업을 효율적으로 수행합니다.

  2. 풀 테이블 스캔 vs 풀 인덱스 스캔: 풀 테이블 스캔 대신 인덱스를 통해 직접 데이터를 정렬할 수 있다면 MySQL은 이를 통해 성능을 개선합니다. LIMIT 조건도 추가되어 있으므로, 필요한 범위의 데이터만 제한적으로 읽어들이며 인덱스를 통한 풀이 가능합니다.

관련하여 인덱스와 실행 계획 최적화에 대한 추가 정보를 아래 링크에서 확인할 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

zzzzz님의 프로필 이미지

작성한 질문수

질문하기