database
[MYSQL] - SELECT 효율적으로 사용하기 - JOIN(2)
sewonzzang123
2022. 1. 3. 15:02
반응형
https://sewonzzang.tistory.com/10
2. JOIN 쿼리의 최적화
A,B,C테이블을 가정할 떄,
A와 C를 JOIN 한다면,
select * from A left join C on A.A_ID=C.A_ID
로 하게 된다면 ALL 이 될 것이다.
왜냐하면 A 테이블은 C에 없는 A_ID 행들을 가지고 있기 때문이다.
A 기준으로 찾는다고 생각을 해 보면, A테이블을 다 뒤져보게 되는 것이다.
그래서, 반대로 조회를 해야 한다.
select * from C left join A on C.A_ID = A.A_ID
더구나 C 테이블의 C.A_ID는 인덱스까지 잡혀있다.
EXPLAIN으로 나온 type 중에 index로 나와도 ALL 다음으로 최악이지만 ALL 보다는 훨씬 빠르다. (using temporary...등등이 없어진다.)
3 테이블을 모두 join 하려면 다음과 같을 것이다.
SELECT A.*,B.*,C.*
FROM C
LEFT JOIN A ON A.A_ID = C.A_ID
LEFT JOIN B ON B.B_ID = C.B_ID
3. STRAIGHT_JOIN
MYSQL에서 내부적으로 JOIN 순서를 바꿔 실행하는 경우가 있다. 이 때 EXPLAIN에서는 type 이 ALL으로 나옴.
그래서 명시된 순서대로 JOIN을 시키려면 STRAIGHT_JOIN을 사용해야 한다.
SELECT STRAIGHT_JOIN A.*,B.*,C.*
FROM C
LEFT JOIN A ON A.A_ID = C.A_ID
LEFT JOIN B ON B.B_ID = C.B_ID
2022.02.19 - [database] - [SQL] 조인 JOIN ( INNER, OUTER, CROSS)
반응형