본문 바로가기

SQL 튜닝의 시작

[ SQL ] 스칼라 서브쿼리의 특성 스칼라 서브쿼리 Select Column List절에 사용된 서브쿼리 특성 1. 최대 결과 건수만큼 반복적으로 수행된다. "최대" 반복 수행 되는 횟수는 SQL의 결과 건수이다. Deterministic 속성을 가지고있다. 동일한 입력 값에 대해 결과 값이 항상 같다는 것을 보장한다. 2. 추출되는 데이터는 항상 1건만 유효하다. 추출되는 데이터가 1건을 초과한다면, "ROWNUM 더보기
[ SQL ] 서브쿼리를 활용한 SQL 성능개선 1. 비효율적인 MINUS 대신 NOT EXISTS를 사용하기 MINUS : 어느 한 집합에 있는 데이터 중 다른 집합에 존재하지 않는 데이터를 추출하는 방식 MINUS를 사용한 SQL이 성능 문제가 발생할 경우, SQL을 변경하지 않고, 성능을 개선하기가 쉽지않다. 차 집합을 추출하기 위해서는 MINUS 연산보다 NOT EXISTS 가 더 효율적이다. ex ) --MINUS select... from A MINUS select from B --NOT EXISTS select... from A where NOT EXISTS ( select... from B where B.XX = A.XX ) 위와 같은 2개의 쿼리문 실행시, MINUS의 경우 테이블 A 데이터 추출 -> 추출된 데이터 SORT 연산 ->.. 더보기
[ SQL ] 서브쿼리 동작방식 이해하기 Filter, Join 동작방식 이해하기 [ 서브쿼리 동장방식 ] 1. FILTER 동작방식 Main SQL에서 추출된 데이터 건수만큼 서브쿼리가 반복적으로 수행되며 처리되는 방식 ( 특징 ) Main SQL의 추출 결과가 많고, 서브쿼리에 제공해 주는 값의 종류가 많다면, 성능이 좋지않다. Main SQL의 추출 건수가 적거나, 추출결과가 많다 하더라도 서브쿼리에 제공해 주는 값의 종류가 적은 경우 성능이 양호하다. 항상 Main SQL이 먼저 수행되며, 서브쿼리는 Main SQL에서 추출된 데이터의 값을 전달 받아 매번 확인하는 형태로 수행된다. 서브쿼리가 Filter 동작방식으로 수행되는 경우 SQL의 성능이 좋지 않은 경우가 대부분 2. JOIN 동작방식 Filter 동작방식과 비교 하였을때, 가.. 더보기
[ SQL ] 서브쿼리에 대한 기본내용 이해하기 이 글은 'SQL 튜닝의 시작' 이란 책을 읽고 내용을 정리하는 글입니다. [ 서브쿼리 기본개념 ] ( 서브쿼리란 ? ) where 절에 비교조건으로 사용되는 select 쿼리 ( 특징 ) 장점 : SQL 작성시에 모든 테이블을 join으로 작성하는 것보다 메인 집합을 만들고 서브쿼리를 사용하여 값을 비교하는 절차적 SQL 작성이 비교적 간편하다. 단점 : 하지만, join으로 처리가 가능한 SQL임에도, 서브쿼리를 남용할 경우 Optimizer가 최적화 과정에서 잘못된 Cost 계산을 하는 경우가 발생하여 DB 서버에 치명적인 성능 문제가 발생할 수 있다. [ 서브쿼리 사용패턴 ] ex 1 ) select * from emp where sal > ( select AVG (sal) from emp ) :.. 더보기