inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

119

zzzzz

작성한 질문수 192

0

강의자료:

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

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

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

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

부서 | 이름 | 순위

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

회계 | 김미현 | 2

회계 | 김민재 | 3

인사 | 하재원 | 6

운영 | 이재현 | 4

운영 | 조민규 | 5

인사 | 최지우 | 7

회계 | 박미나 | 1

sql mysql dbms/rdbms query-tuning

답변 2

0

JSCODE 박재성

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

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

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

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

 

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

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

 

부서 | 이름 | 순위

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

운영 | 이재현 | 4

운영 | 조민규 | 5

인사 | 최지우 | 7

인사 | 하재원 | 6

회계 | 김미현 | 2

회계 | 김민재 | 3

회계 | 박미나 | 1

 

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

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

 

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

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

1

zzzzz

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

SELECT * FROM users

WHERE 이름 = '이재현';

0

JSCODE 박재성

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

0

인프런 AI 인턴

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

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

주제 요약

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

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

비슷한 주제의 기존 답변

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

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

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

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

큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.

0

6

1

쿼리 결과 그리드에서 TYPE, POSSIBLE_KEYS 다릅니다

0

78

3

강의 내용을 블로그에 정리해도 괜찮을까요?

1

117

2

여러 테이블 조인시 where 절이 필요한가? 에 대해 질문있습니다.

0

141

2

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

0

117

2

쿼리 튜닝 관련 질문 (limit)

0

117

1

페이지기반 페이지네이션 쿼리를 최적화하고 싶습니다.

0

165

2

측정 시간 차이

0

197

2

[실습] 인덱스 직접 설정해보기 / 성능 측정해보기 강의에서요.

0

193

1

커버링 인덱스(Covering Index)강의에서 질문이있습니다.

0

181

2

한 번에 너무 많은 데이터를 조회하는 SQL문 튜닝하기 질문입니다

0

255

3

ORDER BY 튜닝관련 문의

0

198

2

강의 질문 있습니다

0

116

2

인덱스 많은 테이블에서 데이터 많아질 수록 insert 속도 증가

0

439

3

MariaDB 사용 시 EXPLAIN ANALYZE 이용 불가 문의

1

586

2

SQL 튜닝에 대한 사례나 Best Practice 등을 모은 자료를 알려주실 수 있나요?

0

317

2

혹시 심화 수업은 계획이 없으신가요..?

0

292

1

jpa쿼리튜닝 팁이 궁금합니다.!

0

447

1

특정 부서에서 최대 연봉을 가진 사용자 조회 sql 쿼리 질문

4

243

1

created_at 에 index 거는것과 지속적인 데이터 증가

0

420

2

WHERE A OR B 에서 인덱스 걸기

0

372

2

질문이있습니다.

1

306

1

테이블에 기본키가 없을때

0

376

1

질문있어요!!!

1

208

1