강의

멘토링

로드맵

Inflearn コミュニティ Q&A

cdy02666959 のプロフィール画像
cdy02666959

投稿した質問数

Real MySQL シーズン 1 - Part 1

Ep.10 LEFT JOIN の注意事項とチューニング

LEFT JOIN 시 드라이빙 테이블을 왜 ALL로 읽나요?

解決済みの質問

作成

·

106

0

10강 LEFT JOIN 주의사항 및 튜닝에서

explain select u.id, u.name, uc.coupon_id, uc.use_yn

from user u

left join user_coupon uc on uc.user_id = u.i and uc.coupon_id = 3;

위 쿼리의 실행계획으로

type ALL 이 나왔는데요
왜 u.id는 primary key인데 왜 index가 나오지 않고 ALL이 나오는 걸까요?

  1. left join 시 where 절에 조건이 없으면 드라이빙 테이블은 항상 ALL로 읽나요?

  2. 혹시 u.name을 select절에 포함해서 ALL이 나오는걸까요?

mysqldbms/rdbmsbackendquery-tuningmysql-query

クイズ

MySQL에서 CHAR와 VARCHAR 데이터 타입의 주요 차이점은 무엇일까요?

CHAR는 가변 길이, VARCHAR는 고정 길이 문자열을 저장해요.

CHAR는 최대 길이만큼 공간을 미리 할당하고, VARCHAR는 저장된 데이터만큼만 공간을 사용해요.

VARCHAR는 인덱스를 사용할 수 없지만, CHAR는 사용할 수 있어요.

VARCHAR는 최대 저장 용량이 CHAR보다 훨씬 작아요.

回答 2

0

eunbinbaeck0088님의 프로필 이미지
eunbinbaeck0088
インストラクター

안녕하세요! 답변이 늦었습니다.

쿼리에 user 테이블에 대한 조건이 없고 또 말씀해주신 것처럼 쿼리의 SELECT 절에 id 컬럼 뿐만 아니라 name 컬럼도 포함되었기 때문에 ALL 이라는 실행계획이 나온것으로 보여집니다.

관련해서 추가적으로 궁금한 부분 있으시면 언제든지 말씀해주세요.

수강해주셔서 감사합니다. 🙂

0

안녕하세요, 인프런 AI 인턴입니다.

또또록님께서 제기하신 궁금증은 MySQL의 쿼리 실행 계획과 인덱스 사용과 관련하여 매우 중요한 부분입니다. MySQL에서 LEFT JOIN을 사용할 때 드라이빙 테이블의 선택과 ALL 타입이 나타나는 이유를 설명드리겠습니다.

  1. LEFT JOIN의 드라이빙 테이블:

    • LEFT JOIN은 왼쪽에 명시된 테이블을 기준으로 잡습니다. 따라서 user u 테이블이 드라이빙 테이블이 됩니다.
    • 드라이빙 테이블로 설정된 테이블은 LEFT JOIN 특성상 모든 row를 확인해야 하므로 ALL이라는 접근 타입이 나타날 수 있습니다.
    • 하지만 항상 ALL이 나오는 것은 아닙니다. 만약 WHERE 절 등에서 특정한 조건을 통해 인덱스를 효과적으로 사용할 수 있다면, 옵티마이저는 이를 고려할 수 있습니다.
  2. 드라이빙 테이블의 ALL 읽기:

    • 드라이빙 테이블로 ALL이 사용하는 이유 중 하나는 인덱스 구성이거나 쿼리 문 맥락에 따라 결정될 수 있습니다.
    • u.name이 SELECT 절에 포함되어 있다고 하더라도, 기본적으로는 인덱스가 설정되어 있지 않은 컬럼에 대해 테이블 전체 스캔을 해야 하는 상황에서는 ALL이 나올 수 있습니다.
  3. Optimal 인덱스 활용 방안:

    • 쿼리의 최적화를 위해 EXPLAIN 명령어를 사용하여 실행 계획을 확인하고, 인덱스가 어떻게 사용되는지 분석하는 것이 중요합니다.
    • 주어진 상황에서 user 테이블에 대한 적절한 인덱스를 검토하고 WHERE 절에 대한 추가적인 조건을 고려해볼 수 있습니다.

질문하신 내용과 관련하여 더 자세한 설명이 필요하시다면, 다음과 같은 유사 답변도 참고하시길 권장드립니다:

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

cdy02666959 のプロフィール画像
cdy02666959

投稿した質問数

質問する