Database/Mysql

[MYSQL] STRAIGHT_JOIN 으로 튜닝하기

Colin Kim 2024. 7. 21. 13:15
반응형

STRAIGHT_JOIN ?

테이블 JOIN을 강제하기 위해 사용하는 방법으로 MYSQL의 옵티마이저가 선택하는 JOIN 순서가 비효율적으로 선택될수 있어, 쿼리 성능이 제대로 되지 않을때, STRAIGH_JOIN을 사용하여, 테이블의 JOIN 순서를 강제하여, 쿼리의 성능을 개선할수 있다.

 

STRAIGHT_JOIN 사용이유

  1. JOIN 순서 강제 : 때로는 옵티마이저가 선택한 순서가 비효율적이므로, STRAIGHT_JOIN을 사용하여 특정 순서로 JOIN순서를 강제할수 있다.
  2. 성능 최적화 : 데이터 분포나 인덱스 사용 등의 이유로 특정 순서로 조인하는 것이 성능에 더 유리할 때 사용.

구문

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

반응형