DB/SQL

MySQL 조인 JOIN 튜닝 : 불필요한 조인을 EXISTS로 바꾸기

호두밥 2021. 10. 10. 19:26

다음의 쿼리는 TITLE이 ENGINEER인 적이 있었던 직원을 가져오기 위한 쿼리입니다.

TITLE이 ENGINEER라고 되어있는 기록과 직원 테이블을 JOIN하여 구하고 있습니다.

 

[튜닝 전]

SELECT DISTINCT E.EMP_NO, E.FIRST_NAME, E.LAST_NAME
FROM EMPLOYEES E,
	(SELECT T.EMP_NO FROM TITLES T WHERE TITLE = 'Engineer') T
WHERE E.EMP_NO = T.EMP_NO;

수행시간 : 1.344 sec / 0.063 sec

COST : 'Last_query_cost', '82168.779876'

 

[ 튜닝 후]

JOIN을 수행할 필요없이 ENGINEER 였던 적이 존재하는 지 여부만 구하면 되기 때문에 JOIN을 EXIST로 바꾸어 줍니다.

EXISTS로 생성되는 임시테이블은 MATERAILZED로 표기됩니다.

SELECT E.EMP_NO, E.FIRST_NAME, E.LAST_NAME
FROM EMPLOYEES E	
WHERE EXISTS (SELECT T.EMP_NO FROM TITLES T WHERE TITLE = 'Engineer' AND E.EMP_NO = T.EMP_NO)

수행시간 : 0.281 sec / 0.266 sec

 

'DB > SQL' 카테고리의 다른 글

MySQL 튜닝 : 적합한 인덱스 생성하기  (0) 2021.10.11
MySQL 튜닝 : 인라인 뷰 데이터 줄이기  (0) 2021.10.10
MySQL 쿼리 정리  (0) 2021.10.10
MYSQL SELECT 튜닝  (0) 2021.10.10
MySQL 데이터 타입 Data Types  (0) 2021.10.10