전체 범위 처리 & 부분 범위 처리
전체 범위 처리
사용자가 요구하는 데이터에 대한 전체 블록의 액세스가 모두 끝난후 데이터를 반환하는 방식.
Group by나 Order by 는 특정한 범위의 데이터를 추출하기 위해서 정렬 후 계산 또는 정렬 결과 를 리턴한다.
2차가공을 해야 만 결과를 추출할 수 있는 경우.
SELECT ENAME, SUM(PAY)
FROM EMP
WHERE DNAME LIKE '총무%'
GROUP BY ENAME
;
- 범위를 줄여주는 Index로 범위는 줄었으나 group 함수 사용으로 전체 범위에 대한 1차 추출 후 2차 가공이 발생.
부분 범위 처리
- 조건에 맞는 데이터를 추출함과 동시에 사용자에게 데이터를 리턴하는 방식.
- 2차 가공이 필요없이 데이터 운반단위에 데이터가 차는대로 사용자에게 리턴.
전체 범위 처리의 부분 범위 처리로의 전환
ORDER BY >>
SELECT * FROM EMP
WHERE deptno ='10'
AND ename LIKE 'S%'
ORDER BY deptno, ename
;
-->
INDEX : deptno,ename
SELECT * FROM EMP
WHERE deptno ='10'
AND ename LIKE 'S%'
;
- 인덱스로 설정된 컬럼값으로 인덱스 블록내에 이미 정렬되어 있기 때문에 해당인덱스를 이용해서 추출할 경우 이미 정렬되어 조회됨.
GROUP BY >>
where절의 조건에 대한 데이터 추출 후 그 데이터를 그룹별로 정렬하여 가공한 후 리턴
SELECT ename, SUM(salary)
FROM emp
WHERE ename LIKE 'S%'
GROUP BY ename
-->
INDEX설정 : ename, salary
SELECT ename, SUM(salary)
FROM emp
WHERE ename LIKE 'S%'
GROUP BY ename
MAX : 채번(번호), 최고액, 당일 >
- 인덱스는 생성 시 ASC가 기본으로 생성되고, 사용자가 직접 DESC로 생성할수 있다.
- ASC로 설정되어 있다면 인덱스의 가장 윗부분은 가장 작은 값이 된다. 마지막은 가장 큰값.
/*+INDEX_DESC */ 힌트 사용.
; 인덱스의 가장 마지막 데이터가 추출.
; ROWNUM = 1 사용.
; 수억건의 데이터가 존재하는 경우 인덱스 역시 수억건이 될수 있으므로 인덱스 생성 시 DESC로 생성하여 최근 건에 대해 추출속도를 개선.
DBMS call
-오라클은 프로그램 내의 문법을 해석하고 실행하는 것이 아니라 프로그램 내에 있는 각각의 SQL을 개별적으로 수행한 후 결과에 따라 데이터를 리턴. SQL문장 하나를 수행하면 DBMS CALL이 한번 발생.
- 여러명이 사용하는 dbms call이 발생하면 시스템의 부하가 누적되어 메모리 누수 및 성능저하 관련.
1건이상 존재하면 update , 없으면 insert 할때
count() 보다 Exists 나 Not Exists 사용.
SELECT COUNT(*)
INTO :chk
FROM EMP
WHERE ename LIKE 'S%'
;
If chk > 0 Then
...
-->
SELECT ...
FROM dept
WHERE deptno = '10'
AND EXISTS ( SELECT '1'
FROM emp
WHERE ename LIKE 'S%'
AND rownum = 1 )
;
- Exists 는 조건에서 추출하고자 하는 데이터를 발견하자 마자 Main Query에 True를 리턴한다.
Unoin & Union All & Intersect & Minus
- 실행구조에 차이.
- Union, Intersect, Minus의 실행구조는 동일.
Union >
emp 테이블에서 부서가 '인사', '총무'에 대해 union 시
1) 각 테이블 에서 처리조건에 맞는 데이터를 추출.
2) 중복row 단일화 하기 위해 정렬한 뒤 병합하여 데이터 리턴.(병합하기 전에 정령작업은 전체범위처리)
'DBMS > 오라클기타' 카테고리의 다른 글
view (0) | 2013.05.12 |
---|---|
Nested Loop Join (0) | 2013.05.05 |
통계정보 확인하기.(인덱스 추가설정 시 통계정보 부재로 문제가 발생할 시 ) (0) | 2013.05.05 |
인덱스 Monitoring 기법 (0) | 2013.05.05 |
월별 일자 (0) | 2013.05.03 |