inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Nhập môn và Thực hành Tối ưu hóa hiệu suất MySQL dành cho cả người không chuyên (Phần Tuning SQL)

[Thực hành] Tối ưu hóa câu lệnh SQL tìm kiếm bài viết được tạo trong khoảng thời gian cụ thể theo tên người dùng

p.created_at vs u.name 인덱스 문의

38

jason

81 câu hỏi đã được viết

0

안녕하세요 강사님


그 전 섹션 강의에서

range index인 create_at에 인덱스를 거는것이 name에 거는것보다 속도 향상이 드라마틱하게 올라갔었는데


이번 강의 두 테이블 조인에서는

create_at 이 아닌 u.name에 인덱스가 걸렸네요..? 혼란스럽습니다 ㅠ


join시 인덱스 방식이 달라지는지 궁금합니다

또, 다른 곳에서 파티셔닝, 클러스터링?? 이라는 용어들도 보이던데 이것도 인덱스에서 파생된 것일까요?

sql mysql dbms/rdbms query-tuning

Câu trả lời 2

0

jscode

안녕하세요 태경님 ! 질문 잘 해주셨어요~

질문해주신 내용에 대해 답변드려볼게요!

"join시 인덱스 방식이 달라지는지 궁금합니다."

-> 조인이라서 달라진다기보다는, 그 쿼리에서 어떤 조건이 데이터를 가장 많이 걸러주느냐에 따라 인덱스 걸 위치가 달라진다고 보시면 돼요 ! 조인에서는 MySQL이 한 테이블을 먼저 읽고 그 결과 건수만큼 반대편 테이블을 찾아가기 때문에, 먼저 읽는 테이블의 결과를 최대한 줄이는 게 핵심이에요 ! 유저 이름은 동등 조건(=)이라 범위 조건인 created_at보다 훨씬 적은 행으로 좁혀지다보니 u.name에 인덱스를 거는 게 효과적이었던 거죠 ! EXPLAIN으로 어떤 테이블이 먼저 읽히는지 직접 확인해보시면 훨씬 이해가 잘 되실 거예요 :)

"또, 다른 곳에서 파티셔닝, 클러스터링?? 이라는 용어들도 보이던데 이것도 인덱스에서 파생된 것일까요?"

-> 인덱스에서 파생된 건 아니고 별개의 기술이에요 ! 파티셔닝은 큰 테이블을 특정 기준으로 쪼개 저장해서 필요한 조각만 읽게 하는 방식이구요, 클러스터링은 InnoDB에서 PK 기준으로 데이터가 정렬되어 저장되는 걸 뜻하기도 하고 DB 서버를 여러 대 묶는 걸 뜻하기도 해요 ! 다만 지금 단계에서는 굳이 파고들지 않으셔도 괜찮아요ㅎㅎ 인덱스 감부터 확실히 잡으신 뒤에 보셔도 늦지 않아요 :)

추가로 궁금하신 점 있으시면 또 질문 남겨주세요~~

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 홍태경님, 질문 주셔서 감사합니다!

질문하신 내용과 관련하여 조인에서 인덱스 사용에 대해 설명드리겠습니다.

조인 시 인덱스 사용

  1. 조인에서의 인덱스: 조인 시에는 데이터베이스가 두 개 이상의 테이블에서 데이터를 가져와야 하기 때문에, 인덱스의 사용 방식이 달라질 수 있습니다. 주로 조인에서의 인덱스는 조인 조건에 주로 사용하는 컬럼에 걸리는 것이 중요합니다. 예를 들어, p.created_at이 아닌 u.name에 인덱스가 걸린 이유는 조인 조건이 u.name 컬럼에 기반하여 더 자주 사용되었기 때문일 수 있습니다.

  2. 쿼리 실행 계획과 인덱스: 특정 컬럼에 인덱스가 걸릴지 여부는 쿼리 실행 계획(옵티마이저가 쿼리를 실행하기 위한 계획)에 따라 달라집니다. 실제 조인에서 어떤 인덱스가 사용될지는 실행 계획을 통해 확인할 수 있습니다.

추가 용어 설명

  • 파티셔닝: 파티셔닝은 테이블을 여러 조각으로 나누어 각 파티션을 별도의 단위로 관리할 수 있게 합니다. 이는 대용량 데이터를 효율적으로 관리하고 쿼리 성능을 향상시키기 위해 사용됩니다.

  • 클러스터링: 클러스터링은 여러 개의 테이블이나 인덱스를 디스크 상에서 물리적으로 가까운 곳에 저장하여 I/O 성능을 향상시키는 기법입니다.

이와 같은 개념들은 인덱스와 독립적으로 사용되지만, 종종 함께 사용되어 데이터베이스 성능 최적화에 기여할 수 있습니다.

관련 링크:

  • 질문이있습니다.
  • 이 페이지에서 인덱스 관련 설명 및 조인에 대한 힌트를 얻을 수 있습니다.

질문하신 내용이 도움 되셨길 바라며, 추가로 궁금한 점 있으시면 언제든지 질문해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

[실습] WHERE문이 사용된 SQL문 튜닝하기 - 2

0

61

2

[실습] 인덱스 직접 설정해보기/성능 측정해보기

0

61

2

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

0

82

2

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

0

111

3

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

1

146

2

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

0

178

2

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

0

149

2

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

0

160

2

쿼리 튜닝 관련 질문 (limit)

0

145

1

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

0

192

2

측정 시간 차이

0

229

2

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

0

233

1

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

0

213

2

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

0

308

3

ORDER BY 튜닝관련 문의

0

223

2

강의 질문 있습니다

0

140

2

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

0

496

3

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

1

651

2

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

0

368

2

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

0

309

1

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

0

470

1

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

4

265

1

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

0

469

2

WHERE A OR B 에서 인덱스 걸기

0

415

2