반응형
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)
반응형
'database' 카테고리의 다른 글
[SQL] 인덱스(Index) - (2) 인덱스 기본 사용법 - 1 (0) | 2022.01.25 |
---|---|
[SQL] 인덱스(Index) - (1) 미리보는 인덱스 튜닝 (0) | 2022.01.22 |
[MYSQL] - SELECT 효율적으로 사용하기 - JOIN(1) (0) | 2022.01.03 |
[mysql] 자주 사용하는 select (0) | 2021.12.31 |
[mac] mariaDB connection error 해결, workbanch 연결 (0) | 2021.12.27 |
댓글