코딩하는 문과생
[SQL] 12. SEQUENCE, INDEX 본문
# SEQUENCE
순차적으로 정수 값을 자동으로 생성하는 객체
//시퀀스
CREATE SEQUENCE SEQ_EMPID
START WITH 300
INCREMENT BY 5
MAXVALUE 310
NOCYCLE
NOCACHE;
SELECT SEQ_EMPID.NEXTVAL FROM DUAL;
//시퀀스 생성
CREATE SEQUENCE EX_SEQ
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 1000
NOCYCLE;
CREATE TABLE EXAMPLE_TABLE (
EID NUMBER NOT NULL,
ENAME VARCHAR(20)
);
//시퀀스 부여
INSERT INTO EXAMPLE_TABLE(EID, ENAME) VALUES(EX_SEQ.NEXTVAL, 'ABC');
INSERT INTO EXAMPLE_TABLE(EID, ENAME) VALUES(EX_SEQ.NEXTVAL, 'DEF');
INSERT INTO EXAMPLE_TABLE(EID, ENAME) VALUES(EX_SEQ.NEXTVAL, 'GHI');
//확인
SELECT * FROM EXAMPLE_TABLE;
활용방안: 게시판에 글이 하나 추가될때마다 글번호(PK)가 생겨야 하는 경우
# INDEX
-
INDEX는 데이터베이스 테이블에 있는 데이터를 빨리 찾기 위한 용도의 데이터베이스 객체이며 일종의 색인기술이다.
-
테이블에 INDEX를 생성하게 되면 INDEX TABLE을 생성해 관리한다.
-
INDEX는 테이블에 있는 하나이상의 컬럼으로 만들 수 있다.
-
가장 일반적인 B-tree INDEX는 INDEX 키(인덱스로 만들 테이블의 컬럼 값)와 이 키에 해당하는 컬럼 값을 가진 테이블의 로우가 저장된 주소 값으로 구성된다. 그리고 B-tree INDEX를 이용해 값을 찾는다.
-
테이블에 직접 접근(전체 스캔)하는 것이 아닌 rawid를 이용해 테이블의 값에 접근한다.
-
JOIN에 자주 사용되는 칼럼에 사용된다.
-
너무 많이 만들면 insert, delete, update시에 부하가 발생해 전체적인 데이터베이서 성능을 저하합니다. 따라서 쓰지 않는 인덱스는 삭제시키는것이 좋다.
인덱스 생성
CREATE INDEX index_name ON table_name(column list ... ) ... ;
//INDEX 생성
CREATE INDEX EX_INDEX ON EXAMPLE_TABLE(EID, ENAME);
//INDEX 조회
SELECT * FROM USER_INDEXES WHERE TABLE_NAME = 'EXAMPLE_TABLE';
//INDEX 삭제
DROP INDEX EX_INDEX;
unique index: 기본키가 가지는 인덱스
# SQL 성능향상을 위한 JOIN의 의해
ORACLE은 JOIN시 OPTIMIZER가 JOIN방식을 알아서 선택한다.
- NESTED LOOP JOIN
-
하나의 테이블을 기준으로 순차적으로 상대 테이블의 ROW를 결합하여 원하는 결과를 추출하는 테이블 JOIN방식
-
JOIN을 할 때 테이블을 거는 순서도 중요하다.
-
행이 작은 테이블부터 JOIN을 시작하는게 유리하다.
-
ANY JOIN
- SORT MERGE JOIN(거의 선택되지 않음)
- HASH JOIN
-
EQUAL JOIN
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] MySQL에서 사용자 추가 및 권한 부여 (0) | 2020.03.10 |
---|---|
[SQL] 13. DML (0) | 2020.01.29 |
[SQL] 11. DDL(3) (0) | 2020.01.23 |
[SQL] 10. DDL(2) (0) | 2020.01.23 |
[SQL] 9. DDL (0) | 2020.01.23 |