반응형
JOIN에 대한 설명
방법 | 설명 |
중첩 반복 조인 (Nested Loop Join) |
- 좁은 범위에 유리 - 유리순차적으로 처리하며, Random Access 위주 - 후행(Driven) 테이블에는 조인을 위한 인덱스가 생성되어 있어야 함 - 실행속도 = 선행 테이블 사이즈 * 후행 테이블 접근횟수 |
색인된 중첩 반복 조인, 단일 반복 조인 (Single Loop Join) |
- 후행(Driven) 테이블의 조인 속성에 인덱스가 존재할 경우 사용 - 선행 테이블의 각 레코드들에 대하여 후행 테이블의 인덱스 접근 구조를 사용하여 직접 검색 후 조인하는 방식 |
정렬 합병 조인 (Sort Merge Join) |
- Sort Merge 조인은 해당 테이블의 인덱스가 없을때 수행이 된다. - 테이블을 정렬(Sort) 한 후에 정렬된 테이블을 병합(Merge) 하면서 조인을 실행한다. - 조인 연결고리의 비교 연산자가 범위 연산( >, < )인 경우 Nested Loop 조인보다 유리 - 두 결과집합의 크기가 차이가 많이 나는 경우에는 비효율적 |
해시 조인 (Hash Join) |
- 해시(Hash)함수를 사용하여 두 테이블의 자료를 결합하는 조인 방식 - Nested Loop 조인과 Sort Merge 조인의 문제점을 해결 - 대용량 데이터 처리는 상당히 큰 hash area를 필요로 함으로, 메모리의 지나친 사용으로 오버헤드 발생 가능성 |
[TIP]
NULL 값은 비교에서 애초에 제외된다. where 조건의 IN() 연산자 안에 NULL이 있어도 비교연산을 수행하지 않는다.
방법 | 설명 |
ROLLUP | - 전체합계와 소그룹 간의 소계를 계산하는 ROLLUP 함수 예) GROUP BY ROLLUP (DEPTNO); → DEPTNO 합계(소계), 전체 합계를 조회 |
CUBE | - CUBE는 제시한 칼럼에 대해서 결합 가능한 모든 집계를 계산한다. - 다차원 집계를 제공하여 다양하게 데이터를 분석할 수 있다. 예) GROUP BY CUBE(DEPTNO, JOB); → DEPTNO 합계, JOB 합계, DEPTNO & JOB 합계, 전체 합계를 조회 조합할 수 있는 모든 경우의 수가 조합된다. *시스템에 부하를 많이 주는 단점이 있음 |
GROUPING SET | - 원하는 부분의 소계만 손쉽게 추출하여 계산할 수 있는 GROUPING SETS 함수 |
[TEST18]
DNAME JOB SAL
----------------------------
ACCOUNTING CLERK 1000
ACCOUNTING MANAGER 2000
ACCOUNTING PRESIDENT 3000
RESEARCH CLERK 4000
RESEARCH MANAGER 5000
RESEARCH PRESIDENT 6000
SALES CLERK 7000
SALES MANAGER 8000
SALES PRESIDENT 9000
SQL>
SELECT DNAME
, JOB
, SUM(SAL)
FROM TEST18
GROUP BY
CUBE(DNAME,JOB)
;
DNAME JOB SUM(SAL)
-------------------- --------------------
45000
CLERK 12000
MANAGER 15000
PRESIDENT 18000
SALES 24000
SALES CLERK 7000
SALES MANAGER 8000
SALES PRESIDENT 9000
RESEARCH 15000
RESEARCH CLERK 4000
RESEARCH MANAGER 5000
RESEARCH PRESIDENT 6000
ACCOUNTING 6000
ACCOUNTING CLERK 1000
ACCOUNTING MANAGER 2000
ACCOUNTING PRESIDENT 3000
16 rows selected.
SQL>
SELECT DNAME
, JOB
, SUM(SAL)
FROM TEST18
GROUP BY
ROLLUP(DNAME,JOB)
;
DNAME JOB SUM(SAL)
-------------------- --------------------
SALES CLERK 7000
SALES MANAGER 8000
SALES PRESIDENT 9000
SALES 24000
RESEARCH CLERK 4000
RESEARCH MANAGER 5000
RESEARCH PRESIDENT 6000
RESEARCH 15000
ACCOUNTING CLERK 1000
ACCOUNTING MANAGER 2000
ACCOUNTING PRESIDENT 3000
ACCOUNTING 6000
45000
13 rows selected.
SQL>
SELECT DNAME
, JOB
, SUM(SAL)
FROM TEST18
GROUP BY
GROUPING SETS(DNAME,JOB)
;
DNAME JOB SUM(SAL)
-------------------- -------------------- ----------
ACCOUNTING 6000
RESEARCH 15000
SALES 24000
CLERK 12000
PRESIDENT 18000
MANAGER 15000
6 rows selected.
SQL>
SELECT DNAME
, JOB
, SUM(SAL)
FROM TEST18
GROUP BY CUBE(DNAME)
;
인덱스 생성 / 삭제
인덱스 생성
CREATE INDEX [인덱스 명] ON [테이블 명] [칼럼명]
복한 인덱스 생성
CREATE INDEX [인덱스 명] ON [테이블 명](칼럼명A, 칼럼명B)
유니크(UNIQUE) 인덱스 생성
CREATE UNIQUE INDEX [인덱스 명] ON [테이블 명](칼럼명A, 칼럼명B)
인덱스 삭제
DROP INDEX [인덱스 명]
반응형
'데이터베이스 > Sql Quiz' 카테고리의 다른 글
SQLD 노랭이 책 암기 - 1 (0) | 2023.06.08 |
---|
댓글