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

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

zzzzz님의 프로필 이미지

작성한 질문수

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

멀티컬럼인덱스 질문있습니다.

작성

·

54

·

수정됨

0

강의자료:

https://jscode.notion.site/661a5bcd11c74b4c97520460dbc4a328

주의 사항 2에서요. 정렬을 자세히 잘 살펴보면 이름 기준으로 정렬이 되어 있지는 않다. 왜냐면 같은 부서를 가진 데이터끼리만 정렬을 시켰기 때문이다. 실제로 아래 SQL문을 실행시킬 때 인덱스를 활용하지 못한다.

윗 부분에 말 뜻이. 처음부터 이름 순으로 정렬이 안되어있어서 멀티컬럼인덱스가 사용이 어렵다는 말씀인가요?

즉 아래 컬럼 처럼 안되어 있어서 멀티 컬럼인덱스가 적용이 안된다는 말씀인가요?

부서 | 이름 | 순위

----------------------

회계 | 김미현 | 2

회계 | 김민재 | 3

인사 | 하재원 | 6

운영 | 이재현 | 4

운영 | 조민규 | 5

인사 | 최지우 | 7

회계 | 박미나 | 1

답변 2

0

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

안녕하세요 zzzzz님! 멀티 컬럼 인덱스 공부하시다가 질문 주셨군요~!!

(부서, 이름) 컬럼을 멀티 컬럼 인덱스로 설정하게 되면

부서를 기준으로 먼저 데이터를 정렬시키기 때문에

데이터가 이름을 기준으로 정렬이 되어 있지 않게 됩니다!

 

말씀해주신 예시에서 (부서, 이름) 멀티 컬럼 인덱스를 걸게 되면

아래와 같이 정렬이 될거에요!

 

부서 | 이름 | 순위

----------------------

운영 | 이재현 | 4

운영 | 조민규 | 5

인사 | 최지우 | 7

인사 | 하재원 | 6

회계 | 김미현 | 2

회계 | 김민재 | 3

회계 | 박미나 | 1

 

부서를 ㄱㄴㄷ순으로 정렬했을 때 운영 -> 인사 -> 회계의 순서로 구성되어야 합니다.

그리고 같은 부서 내에서 이름을 ㄱㄴㄷ순으로 정렬했을 때 위와 같이 데이터를 정렬하게 됩니다.

 

위 설명을 보시고 아직까지 이해가 안 되시는 부분이 있으시다면

편하게 댓글 또 남겨주세요~~

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

쌤 . 아래 코드는 이름순으로 정렬한 인덱스가 있거나 멀티컬럼인덱스(이름,부서순인) 가 있어야 하는데 없기때문에 아래 코드는 users 테이블에서 인덱스를 사용하지 않고 테이블을 조회(풀 스캔)을 하는건가요?

SELECT * FROM users

WHERE 이름 = '이재현';

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

네 맞습니다! 잘 이해하신 것 같네요:D

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. zzzzz님께서 질문하신 멀티 컬럼 인덱스 적용에 관한 내용에 대해 답변 드리겠습니다.

멀티 컬럼 인덱스는 여러 열을 결합하여 인덱스를 만드는 방법으로, 특정 쿼리를 최적화하는 데 도움을 줍니다. 주의 사항에서 언급된 “정렬” 부분은 ‘indexing의 순서와 실제 데이터의 정렬 여부’에 관한 설명입니다.

주제 요약

  • 정렬 관점: 멀티 컬럼 인덱스를 사용할 때, 쿼리가 정확히 인덱스의 순서(예: 부서, 이름)로 조건을 사용하면 효과적으로 인덱스를 활용할 수 있습니다. 그러나 첫 번째 정렬 기준인 부서 기준으로만 정렬되고, 이름 기준까지 선순위를 맞추지 않으면 인덱스가 의도한 대로 사용되지 않을 수 있습니다.

  • 인덱스 활용: 예를 들어, 부서이름 순으로 멀티 컬럼 인덱스를 생성했다면, 쿼리의 WHERE 절이나 ORDER BY 절에서 부서를 먼저 사용하고, 그 다음에 이름을 같이 사용하여 활용해야 제대로 된 성능 향상이 가능합니다. 그렇지 않으면 인덱스의 이점이 감소할 수 있습니다.

비슷한 주제의 기존 답변

  1. 질문이있습니다. - 멀티 컬럼 인덱스를 다루며, 쿼리를 어떻게 작성할 때 인덱스가 최대한 활용될 수 있는지 설명합니다.

질문하신 내용처럼 인덱스 적용에서 중요한 것은 쿼리와 인덱스가 동일한 조건과 순서로 매칭되어야 한다는 점입니다. 이는 옵티마이저가 인덱스를 효율적으로 사용할 수 있도록 도와줍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

zzzzz님의 프로필 이미지

작성한 질문수

질문하기