본문 바로가기

데이터베이스/오라클

(18)
BitMap Index 사용 이유. 일반적인 B*tree 구조의 Index와 달리 bitMap Index는 NULL값도 검색이 가능하다. NULL값에 대해서도 기록한다. 이에 대해서 2가지 장점을 가진다. 1. 보통의 Index는 NULL값도 포함하지만 조건절에서 IS NOT NULL을 통해 검색을 할 경우 INDEX FULL SCAN을 유발한다. BIT맵의 경우 NULL에 대한 값을 기록하므로 INDEX RANGE SCAN이 가능하다. 2. 시작 rowid와 종료 rowid만을 기록하고 중간값을 BITMAP Index의 offset을 활용하므로 일반적인 B*tree Index에 비해서 검색이 조금 더 빠르다. 하지만 결국 BITMAP INDEX도 DISK를 경유한 TABLE에 대한 SCAN발생시 I/O를 유발하므로 보통 INDEX와 크게..
인덱스 Skew 및 Fragment Index Skew - 인덱스 엔트리가 왼쪽 또는 오른쪽에 치우치는 현상 DELETE FROM T WHERE NO
7. 집계 함수 오라클에는 많은 집계 함수들이 존재한다. EX) SUM(), COUNT(), MIN()..... 집계함수의 작동 원리에 대해서 설명해보자 한다. col1 col2 col3 ======================= 10 20 NULL 15 NULL NULL 50 70 20 해당 테이블이 존재한다고 가정하자. 집계함수는 COUNT(*)을 제외하고는 NULL값은 포함시키지 않는다. 따라서 SUM(COL2)를 한순간 20 + NULL(제외) + 70 = 90이 나오게 된다. 여기서 평균을 구하고 싶으면 SUM(COL2) / COUNT(COL2)를 통해 구하면 된다. 하지만 전체 로우 건수를 기준으로 평균을 구하고 싶다면 SUM(COL2)/COUNT(*)으로 구하면된다. SUM(COL + COL2 + COL3)..
6. 데이터형 데이터 타입 데이터 타입이란 컬럼이 저장되는 데이터 유형을 말합니다. 오라클에서 기본적으로 제공하는 기본 데이터 타입과 이 기본데이터 타입을 혼합하여 만들 수 있는 사용자 정의 데이터 타입으로 구분할 수 있습니다. 기본 데이터 타입은 문자형, 실수, 소수, 자료형 등의 여러 데이터를 식별하는 타입입니다. 문자 데이터 타입 데이터타입 설명 CHAR(n) 고정길이 문자 / 최대 2000byte / 디폴트 값은 1byte VARCHAR2(n) 가변길이 문자 / 최대 4000BYTE / 디폴트 값은 1byte NCHAR(n) 고정길이 유니코드 문자(다국어 입력가능) / 최대 2000byte / 디폴트 값은 1byte NVARCHAR(n) 가변길이 유니코드 문자(다국어 입력가능) / 최대 2000byte / 디폴..
5. 함수 Rank , Dense_Rank 오라클에서 성적, 급여, 매출 등 순위를 구하기 위해서 순위 함수(RANK, DENSE_RANK)를 사용하면 된다. 순위 함수의 순위는 OVER 함수 내부의 ORDER BY 컬럼 값으로 결정된다. RANK() : 중복 순위 개수만큼 다음 순위 값을 증가 시킴 DENSE_RANK() : 중복 순위가 존재해도 순차적으로 다음 순위 값을 표시함 RANK와 DENSE_RANK 차이점은 아래 예제를 보면 쉽게 알 수 있다. SELECT ENAME , SAL , RANK() OVER (ORDER BY SAL DESC) RANK , DENSE_RANK() OVER (ORDER BY SAL DESC) DENSE_RANK FROM EMP ORDER BY SAL DESC 예제_쿼리_1(테이블포함).txt RANK() 함수..
4. 뷰 Merging 4. 뷰 Merging (1) 뷰 Merging 이란? SELECT * FROM ( SELECT * FROM EMP WHERE JOB = 'SALESMAN' ) A ,( SELECT * FROM DEPT WHERE LOC = 'CHICAGO' ) B WHERE A.DEPTNO = B.DEPTNO; 서브쿼리나 인라인 뷰처럼 쿼리를 블록화 할 시, 가독성이 더 좋기 때문에 습관적으로 사용 옵티마이저가 최적화 수행하기에는 쿼리블록을 풀어내려는 습성이 있음 (옵티마이저 개발팀이 그렇게 만들었데요..-_-;;) SELECT * FROM EMP A, DEPT B WHERE A.DEPTNO = B.DEPTNO AND A.JOB = 'SALESMAN' AND B.LOC = 'CHICAGO'; 의 쿼리 블록이 엑세스 쿼..
3. 쿼리 변환 쿼리 변환 (Query Transformation) - 쿼리 옵티마이저가 SQL을 분석해 의미적으로 동일(같은 결과를 리턴)하면서도 더 나은 성능이 기대되는 형태로 재작성 ① 휴리스틱 쿼리 변환 결과만 보장된다면 무조건 쿼리 변환 수행 (일종의 Rule-based 최적화 기법) ② 비용기반 쿼리 변환 변환된 쿼리의 비용이 더 낮을 때만 쿼리 변환 수행 서브쿼리의 분류 - 인라인 뷰 (Inline View) : from 절에 나타나는 서브쿼리 - 중첩된 서브쿼리 (Nested Subquery) : 결과집합을 한정하기 위해 where 절에 사용된 서브쿼리 * 서브쿼리가 메인쿼리에 있는 컬럼을 참조하는 형태를 '상관관계 있는 서브쿼리'라고 함 - 스칼라 서브쿼리 (Scalar Subquery) : 한 레코드당..
2. 비트맵 인덱스 Bitmap Index (비트맵 인덱스) - Key 값에 중복이 없고, Key 값 별로 하나의 비트맵 레코드를 가짐 - 비트맵 상의 각 비트가 하나의 테이블 레코드와 매핑 row#0( 8001) flag: ------, lock: 0, len=35 col 0; len 2; (4): 42 4c 55 45 → 키 값 : BLUE col 1; len 6; (6): 01 00 9f 4c 00 00 → 시작 RowID col 2; len 6; (6): 01 01 a4 03 01 47 → 종료 RowID col 3; len 15; (15): 00 c1 ae bb fa 02 c1 a1 10 c1 94 19 c2 dc 07 → 비트맵 - 시작 RowID와 종료 RowID만 갖고 있다가 테이블 액세스가 필요할 때면 각 ..