다음의 쿼리는 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 |