Oracle 인덱스, 뷰, 시퀀스, 트랜잭션, 세션 정리
인덱스(INDEX)
- 데이터를 처음부터 끝까지 찾는 건 Table Full Scan, 인덱스를 통해 검색하는 것은 Index Scan이라고 한다
- 데이터 양이 많을 때 Full Scan을 하면 검색 속도가 느려지고, 일정하지 않다
- 기본키(Primary key)또는 고유키(unique key)일 경우 자동으로 생성됨
- Index Scan은 일정한 검색속도를 제공한다
- Index 생성 시 오히려 성능이 떨어질 수도 있다(튜닝 참고)
- 인덱스 생성
CREATE INDEX index_name
ON table_name(column_name)
- 인덱스 삭제
DROP INDEX 인덱스 이름;
뷰(VIEW)
- 하나 이상의 테이블을 조회하는 SELECT 문을 저장한 객체
- 물리적으로 따로 저장하지 않음
- 쿼리의 복잡도를 낮추고, 보안적인 용도로 사용
뷰 조회 | 기존 테이블 조회 |
---|---|
SELECT * FROM VM_TOP_3 | SELECT C.CNO, C.CNAME, S.AVG_RESULT FROM COURSE C, (SELECT CNO, AVG(RESULT) AS AVG_RESULT FROM SCORE GROUP BY CNO ORDER BY AVG(RESULT) DESC)S WHERE C.CNO = S.CN |
- view 생성
CREATE VIEW VIEW_NAME
AS ( 복잡한 SELECT 쿼리)
- view 삭제
DROP VIEW VW_EMP20;
시퀀스(Sequence)
- 대리 식별자. 특정 규칙에 맞는 연속 숫자를 생성하는 객체. 값이 커지면서, 고유한 값을 생성한다
- 시퀀스는 이전 값을 돌아오게 할 수 없다
- 시퀀스 생성 및 사용
CREATE SEQUENCE Sequence 이름 -- 시퀀스 생성
CREATE SEQUENCE department_id_seq
START WITH 1 -- 어떤 숫자부터 값을 매길 것인지
INCREMENT BY 10; -- 다음 숫자는 얼마만큼 커질 것인지
INSERT IINTO departments -- 시퀀스 사용
VALUES(department_id_seq.NEXTVAL , 'IT Education', 103, 1400);
DROP SEQUENCE SEQUENCE_NAME -- 시퀀스 삭제
트랜잭션(Transaction)
- 실행단위 안에 여러 SQL문이 존재할 수 있다.
- 실행단위 기준으로 실행 되거나, 실행되지 않아야 한다
- 트랜잭션을 취소 하고 싶을 때 ROLLBACK 사용
- 트랜잭션을 영원히 반영하고 싶다면 COMMIT. ROLLBACK되지 않는다
- 트랜잭션 예제
CREATE TABLE NEW_TABLE( -- 테이블 생성
NEW_INDEX NUMBER,
INEW_COUNT NUMBER
);
INSERT INTO NEW_TABLE VALUES(1, 10);
INSERT INTO NEW_TABLE VALUES(2, 10);
COMMIT; -- 데이터 저장(ROLLBACK으로 못돌림)
INSERT INTO NEW_TABLE VALUES(3, 10);
INSERT INTO NEW_TABLE VALUES(4, 10);
ROLLBACK;
-- 데이터 3, 4만 존재
세션(Session)
- 세션은 어떤 활동을 위한 시간이나 기간을 뜻함(게임에서 로그인-로그아웃 기간 같은 것)
- 세션이 여러개라는 건 DB 접속을 여러명이 했다는 뜻
- 만약 A세션에서 데이터를 삭제했다면 B세션에는 반영되지 않는다. 반영하려면 COMMIT을 해야한다