INDEX
- 인덱스 테스트를 위한 테이블 생성
CREATE TABLE INDEX_TEST
(
T_ID CHAR(8) NOT NULL,
T_NAME VARCHAR(50) NOT NULL
);
- 인덱스 이름은 어떤 컬럼의 인덱스인지 알아볼 수 있도록 정해주는 게 좋다.
- 인덱스 유형은 고유하지않음, 고유, 비트맵 등이 있다.
- B-TREE(BALANCE TREE) INDEX (고유하지 않음, 고유)
트리구조로 데이터를 분류해서 관리, 추후 데이터가 많아지면 많아질 수록 UPDATE, INSERT 의 속도가 느려진다.
고유하지 않음 (CLUSTERED INDEX)
- 데이터가 중복되지 않을 때 사용
고유 (NON CLUSTERED INDEX)
- 데이터가 중복될 때 사용 - BITMAP INDEX
- 2진수로 데이터를 정렬, 해당 필드에 데이터의 종류가 한정되어 있을 때 사용 (ex) 서울(1,0,0,0,0), 부산(0,0,0,0,1) ...)
- 잘 쓰이지 않음 - 정렬 데이터를 불러올 때 처음부터 순서대로 볼 것인가, 뒤부터 앞쪽으로 볼 것 인가
/* 테스트 해보고 싶을 때 */
SET SERVEROUTPUT ON;
DECLARE
-- 변수 선언부
BEGIN
-- 로직부
END
;
/* 1부터 100까지 출력 */
DECLARE
BEGIN
FOR I IN 1..100
LOOP
DBMS_OUTPUT.PUT_LINE(I);
END LOOP
;
END;
/* INDEX_TEST TABLE 에 데이터를 넣어보자 */
DECLARE
BEGIN
FOR N IN 1..1000000
LOOP
INSERT INTO INDEX_TEST
VALUES ('I' || TO_CHAR(N, 'FM0000000'), '홍길동' || TO_CHAR(N))
;
END LOOP;
END
;
SELECT COUNT(*) FROM INDEX_TEST;
INDEX_TEST 테이블의 데이터 갯수
SELECT * FROM INDEX_TEST WEHRE T_ID = 'I0074142';
T_ID 가 I0074142인 데이터 찾기
바로 상단 쿼리의 실행계획
- OBJECT_NAME : 테이블 이름
- OPTIONS : 쿼리 실행 시, 옵티마이저가 바라보는 데이터 유형
- CARDINALITY : 중복도, 중복된 값이 적을 수록 숫자가 작음, 이 값을 보고 어떤 인덱스 값을 부여할 지 판단
- COST : CPU가 일을 하는 양, 크면클수록 느림
- OBJECT_NAME : INDEX_TEST 테이블을 보겠다.
- OPTIONS : INDEX_TEST 테이블의 전체 데이터를 하나하나 전부 보겠다. (FULL SCAN)
- CARDINALITY : T_ID 컬럼의 데이터 중복도
- COST : 쿼리를 실행 함으로서 CPU가 하는 일을 양
- OBJECT_NAME : INDEX_TEST 테이블을 보겠다.
- OPTIONS : 인덱스를 줌으로서 옵티마이저가 스스로 데이터를 분류했고 그에 따라 보겠다.
- CARDINALITY : T_ID 컬럼의 데이터 중복도 (B-TREE의 고유)
- COST : 쿼리를 실행 함으로서 CPU가 하는 일을 양 (현저히 줄어든 것을 볼 수 있음)
'Database' 카테고리의 다른 글
[ SQL ] SCHEDULER (스케줄러) (0) | 2021.05.13 |
---|---|
[ SQL ] 반복문 (0) | 2021.05.12 |
[ SQL ] 트리거 (TRIGGER) (0) | 2021.05.04 |
[ SQL ] TRUNC(TRUNCATE) VS ROUND (0) | 2021.05.03 |
[ SQL ] TO_CHAR 함수 (0) | 2021.05.03 |