Perspective of Query
Produced by Tae Young Lee
Index Architecture
Access Cost
수직적 Search수평적 탐색 Table Random Access
Root Node
Branch Node
Leaf Node
Tunning 방법론
Hash & Sort
DataBase
Instance
Data File
Memory
Background Process
PGA
SGA
Program
Global
Area
Un-Correlated(비연관)
Correlated(연관)
Single Row 서브쿼리(단일 행 서브쿼리)
Multi Row 서브쿼리(다중 행 서브쿼리)
Multi Column 서브쿼리(다중 컬럼 서브쿼리)
부분범위 처리 혹은 페이징 처리시 탁월한 힘을 발휘하는 것이 스칼라 서브쿼리
이다. 여러 가지 테스트 결과 스칼라 서브쿼리는 부분범위 처리시 가장 좋다는
Nested Loop 조인보다 성능상 좀더 유리하다. 과다호출로 몸살을 앓고 있는 사
용자 함수를 스칼라 서브쿼리로만 바꾸어도 튜닝이 된다. 또한 View Merging 이
나 JPPD(Join Push Predicate Down) 등의 성공여부를 고민할 필요도 없으므로 특
히 개발자 들에게 인기가 많은 것 또한 사실이다.
모든 기능은 용도에 맞게 사용해야 한다.
이렇게 많이 활용되고 있는 스칼라 서브쿼리도 한계는 있다. Multi Column,
Multi Row 을 RETURN 하는 것은 만들 수가 없다는 것이다. 물론 Pipilined
Funtion 으로 해결이 가능하지만 모든 경우에 이것을 만들기란 여간 힘든 것이
아니다. 바로 이럴 때 사용가능 한것이 Cast + MultiSet 함수를 이용한 스칼라 서
브쿼리이다. MultiSet 함수는 Oracle 8.1.7 부터 사용이 가능하다. 필자가 이 기능
을 소개하는 이유는 실무에서 이런 기능을 꼭 써야 하는 경우임에도 Pipelined 함
수등을 사용하는 것을 많이 보아서이다. Pipelined 등의 함수를 사용해야 할 때는
자주 사용하는 SQL 이 아주 길어서 Network 의 부하가 생길때 혹은 모듈로서 공
유를 해야될 때 이다.
Scala Subquery
JOIN
트랜잭션과 같은 일반적인 서비스 구현에 필요한 기능들이 전혀 준비되어 있지
않기 때문이다.
• SubQuery와 JOIN으로 원하는 값을
뽑아올 수 있다.
• 성능이 좋게 뽑아오기 위해선 DB 내
부 구조를 알아야 한다.
• 화면단에서 빠른 Data출력을 위해선
Query Tunning이 필요하다.
• Tunning을 하는 목적은 Block I/O비용
을 줄이기 위해서다.

Perspective of query

  • 1.
  • 3.
    Index Architecture Access Cost 수직적Search수평적 탐색 Table Random Access Root Node Branch Node Leaf Node
  • 4.
  • 5.
  • 7.
  • 8.
    Un-Correlated(비연관) Correlated(연관) Single Row 서브쿼리(단일행 서브쿼리) Multi Row 서브쿼리(다중 행 서브쿼리) Multi Column 서브쿼리(다중 컬럼 서브쿼리)
  • 14.
    부분범위 처리 혹은페이징 처리시 탁월한 힘을 발휘하는 것이 스칼라 서브쿼리 이다. 여러 가지 테스트 결과 스칼라 서브쿼리는 부분범위 처리시 가장 좋다는 Nested Loop 조인보다 성능상 좀더 유리하다. 과다호출로 몸살을 앓고 있는 사 용자 함수를 스칼라 서브쿼리로만 바꾸어도 튜닝이 된다. 또한 View Merging 이 나 JPPD(Join Push Predicate Down) 등의 성공여부를 고민할 필요도 없으므로 특 히 개발자 들에게 인기가 많은 것 또한 사실이다. 모든 기능은 용도에 맞게 사용해야 한다. 이렇게 많이 활용되고 있는 스칼라 서브쿼리도 한계는 있다. Multi Column, Multi Row 을 RETURN 하는 것은 만들 수가 없다는 것이다. 물론 Pipilined Funtion 으로 해결이 가능하지만 모든 경우에 이것을 만들기란 여간 힘든 것이 아니다. 바로 이럴 때 사용가능 한것이 Cast + MultiSet 함수를 이용한 스칼라 서 브쿼리이다. MultiSet 함수는 Oracle 8.1.7 부터 사용이 가능하다. 필자가 이 기능 을 소개하는 이유는 실무에서 이런 기능을 꼭 써야 하는 경우임에도 Pipelined 함 수등을 사용하는 것을 많이 보아서이다. Pipelined 등의 함수를 사용해야 할 때는 자주 사용하는 SQL 이 아주 길어서 Network 의 부하가 생길때 혹은 모듈로서 공 유를 해야될 때 이다. Scala Subquery
  • 15.
  • 19.
    트랜잭션과 같은 일반적인서비스 구현에 필요한 기능들이 전혀 준비되어 있지 않기 때문이다.
  • 20.
    • SubQuery와 JOIN으로원하는 값을 뽑아올 수 있다. • 성능이 좋게 뽑아오기 위해선 DB 내 부 구조를 알아야 한다. • 화면단에서 빠른 Data출력을 위해선 Query Tunning이 필요하다. • Tunning을 하는 목적은 Block I/O비용 을 줄이기 위해서다.

Editor's Notes

  • #4 http://wiki.gurubee.net/pages/viewpage.action?pageId=26743010 인덱스 탐색은 수직적 탐색과 수평적 탐색으로 구분해 설명할 수 있다.수평적 탐색은 범위스캔 을 말하는 것이며 리프 블록을 인덱스 레코드 간 놀리적 순서에 따라 스캔하기 때문에 수평적 이라고 표현한다. 수직적 탐색은 수평적 탐색을 위한 시작 지점을 찾는 과정으로 루트에서 리프 블록까지 아래쪽으로 진행한다.
  • #16 Join 이란? - 둘 이상의 테이블을 연결하여 데이터를 검색하는 방법 이다. - 보통 둘 이상의 행들의 공통된 값 Primary Key 및 Foreign Key 값을 사용하여 조인 한다. - 두 개의 테이블을 SELECT문장 안에서 조인 하려면 적어도 하나의 컬럼이 그 두 테이블 사이에서 공유 되어야 한다. Join 방법과 방식 - 조인의 방법 : Equi Join (등가 조인, 내부조인) , Non-Equi Join , Self Join , Outer Join - 조인의 방식 : Nested Loop Join, Sort Merge Join, Hash Join
  • #18 INNER JOIN은 JOIN과 같고, LEFT OUTER JOIN은 LEFT JOIN과 같고, RIGHT OUTER JOIN은 RIGHT JOIN과 같습니다.