SQL 튜닝의 시작 (2013년)
많은 조회패턴을 가진 SQL은 하나의 SQL이 아니다 0 0 99,999+

by 구루비스터디 [2018.07.14]


많은 조회 패턴을 가진 SQL은 하나의 SQL이 아니다

  • '하나의 SQL은 하나의 실행계획으로만 수행된다.' => '조인 순서, 조인 방법, 테이블 별 액세스 방법이 하나' 라는 의미
  • 사용자는 SQL이 다양한 조건에 따라 각각 효과적으로 수행되기를 바라지만 하나의 SQL은 하나의 실행계획으로 수행되기 때문에 사용자의 바람대로 수행되지는 않는다.


예제 1. LIKE와 NVL을 사용해 하나의 SQL로 작성한 예


-- LIKE
select t1.*
     , t2.*
from   t1
     , t2
where  t1.c1 like :b1 || '%'
and    t1.c2 like :b2 || '%'
and    t2.c1 like :b3 || '%'
and    t2.c2 like :b4 || '%'
and    t1.no = t2.no

-- NVL
select t1.*
     , t2.*
from   t1
     , t2
where  t1.c1 nvl(:b1, t1.c1)
and    t1.c2 nvl(:b2, t1.c2)
and    t2.c1 nvl(:b3, t2.c1)
and    t2.c2 nvl(:b4, t2.c2)
and    t1.no = t2.no



  • t1, t2 테이블의 특정 인덱스를 선택 후 NL 조인으로 수행된다면 조회 조건에 어떤 값이 들어갔느냐에 따라 성능 편차가 크게 발생됨.
  • 사용자가 Optimizer에 의해 선택된 인덱스에 해당하는 조건 값을 입력시 빠른 응답을 보이지만, 그렇지 않은 경우 각 테이블의 전체 데이터에 대해 인덱스 스캔을 할 수도 있어 비효율적일 수 있음.
  • 그러므로 다양한 조회 패턴을 가진 SQL은 하나의 SQL로 작성하기 보다는 각 조회 패턴별로 분리해 주어야 함.


패턴t1.c1 like :b1 || '%'t2.c1 like :b2 || '%'테이블 조인 순서
1OOt1 -> t2
2OXt1 -> t2
3XOt2 -> t1
4XXt1 -> t2
"데이터베이스 스터디모임" 에서 2013년에 "SQL튜닝의시작 " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3821

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입