장쫄깃 기술블로그

[MySQL] STRAIGHT_JOIN 본문

DataBase/MySQL

[MySQL] STRAIGHT_JOIN

장쫄깃 2022. 9. 12. 01:46
728x90


STRAIGHT_JOIN


MySQL에는 STRAIGHT_JOIN 이라고 하는 JOIN이 있다.

 

STRAIGHT_JOIN is similar to JOIN, except that the left table is always read before the right table. This can be used for those (few) cases for which the join optimizer processes the tables in a suboptimal order.

 

왼쪽 테이블을 강제로 먼저 읽는 JOIN이라고 보면 될 것 같다.

 

간혹 explain을 이용하여 쿼리 실행계획을 보면 index가 적용되지 않고 쿼리 타입이 ALL로 실행되는 경우가 있다. 이는 MySQL의 옵티마이저(optimizer)가 자체적으로 쿼리 성능 향상을 위해 JOIN 순서를 바꾸기 때문에 생기는 문제이다. 대부분 이러한 성능 향상이 효과가 있지만, 오히려 효과가 떨어지는 순간이 있다.

 

이 때, JOIN 순서를 강제로 설정하면 내가 원하는 실행 계획대로 쿼리가 실행하게 된다.

SELECT
	*
FROM A
STRAIGHT_JOIN B ON A.idx = B.idx
;

 

혹은 아래처럼 사용하면 모든 JOIN이 STRAIGHT_JOIN 으로 동작한다.

SELECT
	STRAIGHT_JOIN *
FROM A
JOIN B ON A.idx = B.idx
;
728x90

'DataBase > MySQL' 카테고리의 다른 글

[MySQL] INSERT IGNORE, REPLACE INTO  (0) 2022.09.02
[MySQL] DUPLICATE ON KEY UPDATE  (0) 2022.09.02
[MySQL] DB Transaction(트랜잭션) 이란?  (0) 2022.04.14