[TIL 2021.09.24] Real MySQL: 실행 계획 분석
Today I Learned
from에 여러 테이블 가져올떄
select e.emp_no, e.first_name, s.from_date, s.salary
from employees e, salaries s;
그냥 두개의 테이블을 불러오는 쿼리.
from_date
와salary
가 emp_no
이 10001인 값으로 모두 표현되고 있음.
select e.emp_no, e.first_name, s.from_date, s.salary
from employees e, salaries s
where s.emp_no > 10001;
이렇게 하니까 emp_no 10002의 from_date가 오름차순에서 가장 빠른 날짜의 키의
from_date와 salary의 값을 가져온다.
참고로 salaries 의 emp_no과 from_date가 합쳐져 복합키이다.
결국엔 어쩃든간에 두개이상의 테이블을 의도하려는 대로 가져오려면 where절이 있어야한다.
select e.emp_no, e.first_name, s.from_date, s.salary
from employees e, salaries s
where e.emp_no = s.emp_no;
where절을 붙이니 아래와 같이 나옴.
e.emp_no은 기본키라 10001이 한개이고 s.emp_no은 10001이 여러개이다.
e.emp_no = s.emp_no이라는 조건을 주니까
e.emp_no과 e.first_name이 s.emp_no과 s.from_date에 맞춰서
아래와 같이 표현됨.
select e.emp_no, e.first_name, s.from_date, s.salary
from employees e
join salaries s
on e.emp_no = s.emp_no;
참고로 join으로 이렇게해도 똑같은 결과.
그래서 from에서 두개이상의 테이블을 불러오는 것도 "조인한다"라고 표현. (268p)
EXPLAIN
explain
select e.emp_no, e.first_name, s.from_date, s.salary
from employees e, salaries s
where e.emp_no = s.emp_no
limit 10;
explain 실행했을 때 레코드는 쿼리에서 사용된 테이블의 갯수만큼 나온다.
id가 낮을수록 즉 위에 있을 수록 쿼리의 바깥부분이거나 먼저 접근한 부분이고,
id가 높을수록 즉 아래에 있을 수록 쿼리의 안쪽부분이거나 나중에 접근한 부분이다.
MySQL은 필요에따라 실행계획을 산출하기 위해 쿼리의 일부분을 직접 실행할 때도 있어서 쿼리 자체가 복잡하고 무거우면 실행 계획의 조회도 느려질 가능성이 있다.
Author And Source
이 문제에 관하여([TIL 2021.09.24] Real MySQL: 실행 계획 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kyukim/20210924저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)