1.뷰(view)
- 하나의 가상 테이블이라고 생각
- 작업을 하다보면 자주 조회하는 데이터들이 있다. 한 테이블에 데이터가 있으면 조회하기 편하겠지만 그렇지 않은 경우가 있다. 여러 테이블을 join 사용하여 가져오고 쿼리가 복잡한 경우도 있다. 이러한 경우 쿼리로 뷰를 만들어 놓고 사용하면 편리하다.
- 뷰는 보안에 유리하다
- 테이블에 데이터를 노출시키고 싶지 않을 때, 뷰를 사용하여 보여줄 데이터만 뷰로 제공할 수 있다.
1-1. 뷰의 특징
- 원천데이터가 변경되면 view데이터도 자동 변경
- 뷰의 검색은 자유로우나, 삽입, 수정, 삭제는 제약이 있다.
- 뷰생성 쿼리에 함수를 사용하면 반드시 alias를 지정해주어야 한다.
- view는 table과 유사하며, 테이블처럼 사용한다.
- 테이블과는 달리 데이터를 저장하기 위한 물리적인 공간이 필요하지 않은 가상테이블이다.
- 데이터를 물리적으로 갖지 않지만, 논리적인 집합을 갖는다.
- 테이블과 마찬가지로 select, insert,update,delete명령이 가능하다.
2. 시퀀스(sequence)
2-1. 시퀀스란
- 연속적으로 번호를 만들어 주는 기능
- 시퀀스란 순차적으로 증가하는 순번을 자동 반환하는 데이터베이스 객체이다. 보통 pk값에 중복값을 방지하기위해 사용한다.
2-2 시퀀스 생성
create sequence 시퀀스이름
increament by n : 증가값 설정,n = 2 -> 2씩 증가
start with n : 시작값 설정
maxvalue n : 최대값 설정
minvalue n : 최소값 설정, cycle 옵션일 경우
cycle : 시퀀스를 순 사용할지 설정, nocycle 넣어서 돌리지않게 할 수 있음
cache n : 시퀀스의 속도를 개선하기 위해 캐싱여부 지정, nocache도 있다.
3. Index
3-1. Index란?
- 조회속도를 향상시키기 위한 데이터베이스 검색 기술
- 색인이라는 뜻으로 해당 테이블의 조회 결과를 빠르게 검색하기위해 사용
- 즉, 인덱스가 필요한 이유는 인덱스를 생성해 줌으로써 조회 속도를 빠르게 할 수 있다.
3-2. index의 내부구조
- index를 테이블의 특정 컬럼에 한개이상 주게 되면 index table이 따로 만들어 지고, 인덱스 컬럼의 로우값과 rowid값이 저장되며 row값은 정렬된 트리 구조로 저장시켜 두었다가 검색시 좀 더 빠르게 해당 데이터를 찾는데 도움을 준다.
(rowid는 테이블을 생성하고 컬럼을 만든 후 데이터를 삽입하면 하나의 row가 생성되며, 이는 절대적인 주소를 가지게 되는데 이를 rowid라 한다)
- DML 명령을 사용할 떄는 원본 table은 물론, index table에도 데이터를 갱신시켜 주어야 하기 때문에, update, insert, delete명령을 쓸때 속도가 느려진다.
- 데이터가 많이 쌓일것이라고 예상되는 경우 혹은 많이 쌓여 있어 현재 화면에서 조회속도가 너무 느릴때 인덱스 생성을 한다.
3-3. 반대로 index생성이 불 필요한 경우
- 데이터가 적은(수천건미만)경우에는 인덱스를 설정하지 않는게 오히려 설정이 좋다.
3-4. 인덱스 취약점
- insert : index table에도 insert가 된다.
- delete : index table에서 데이터를 지우지 않고, 사용하지 않음으로 표시하게 된다.
- update : index table에서 delete를 한 후에 새로운 데이터를 insert작업
요약하자면 더미데이터가 계속 쌓인다.
3-5. index 생성