STRAIGHT_JOIN ?
테이블 JOIN을 강제하기 위해 사용하는 방법으로 MYSQL의 옵티마이저가 선택하는 JOIN 순서가 비효율적으로 선택될수 있어, 쿼리 성능이 제대로 되지 않을때, STRAIGH_JOIN을 사용하여, 테이블의 JOIN 순서를 강제하여, 쿼리의 성능을 개선할수 있다.
STRAIGHT_JOIN 사용이유
- JOIN 순서 강제 : 때로는 옵티마이저가 선택한 순서가 비효율적이므로, STRAIGHT_JOIN을 사용하여 특정 순서로 JOIN순서를 강제할수 있다.
- 성능 최적화 : 데이터 분포나 인덱스 사용 등의 이유로 특정 순서로 조인하는 것이 성능에 더 유리할 때 사용.
구문
SELECT *
FROM table1
STRAIGHT_JOIN table2 ON table1.id = table2.id
구문에서 table1를 먼저 읽고, table2를 JOIN 한다.
옵티마이저 비교
일반 JOIN
SELECT *
FROM table1
JOIN table2 ON table1.id = table2.id
옵티마이저는 통계와 인덱스를 기반으로 최적의 순서를 선택한다. 그러나 가끔 이는 기대한 바와 다를 수 있다.
예를 들어, table1 테이블이 매우 크고 table2 테이블이 작을 때, 옵티마이저는 table2를 먼저 읽고 table1를 나중에 JOIN하는 것을 선택할 수 있습니다. 이는 때로 비효율적일 수 있습니다.
STRAIGHT_JOIN
SELECT *
FROM table1
STRAIGHT_JOIN table2 ON table1.id = table2.id
이 경우, table1 테이블이 항상 먼저 읽히고 table2 테이블이 나중에 조인됩니다.
주의 사항
1. 신중한 사용 : 옵티마이저의 결정을 무시하고 조인 순서를 강제할시 예상치 못한 성능 저하가 발생.
2. 분석 필요 : STRAIGHT_JOIN를 사용할 때는 실행 계획을 분석하여 강제된 순서가 정말로 성능에 도움이 되는지 확인 필요.
실행 계획 확인 방법
EXPLAIN
EXPLAIN SELECT *
FROM table1
STRAIGHT_JOIN table2 ON table1.id = table2.id
이 명령어로 MYSQL의 실행계획을 확인할수 있다.
결론
STRAIGHT_JOIN는 특정 상황에서 성능을 최적화하기 위해 조인 순서를 강제할 수 있는 유용한 도구이다.
그러나 이를 사용할 때는 옵티마이저의 기본 결정을 신중하게 분석하고 필요할 때만 사용하는 것이 좋다.
참고사이트
https://www.w3resource.com/mysql/advance-query-in-mysql/mysql-straight-join.php#google_vignette
>MySQL STRAIGHT_JOIN - w3resource
MySQL STRAIGHT_JOIN scans and combines matching rows (if specified any condition) which are stored in associated tables otherwise it behaves like an INNER JOIN or JOIN. This tutorial explains STRAIGHT_JOIN and uses in MySQL.
www.w3resource.com