코딩하는 문과생

[SQL] 12. SEQUENCE, INDEX 본문

프로그래밍/SQL

[SQL] 12. SEQUENCE, INDEX

코딩하는 문과생 2020. 1. 23. 15:29

# 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