2013년 2월 11일 월요일

[DB] TOP-N SQL, INDEX, VIEW, SEQUENCE


* TOP-N SQL
select alias.*, rownum from
(select employee_id, last_name, hire_date from employees order by hire_date) alias
where rownum <= 5

select * from
(select temp.*, rownum r from
(select * from board order by seq) temp)
where r between 3 and 6


### INDEX ###
DB안에 데이터를 매번 full scan하여 찾는 것은 성능과 비용이 좋지 못하다.
따라서 너무 잦은 full scan을 줄이고 일정한 검색 속도를 보장하기 위해
인덱스를 사용한다.

인덱스를 만들면 각각의 인덱스에 따른 ROWID(주소값)가 부여되고 자동적으로
B-TREE구조로 데이터가 정렬된다.

인덱스의 사용순서
1. 인덱스를 생성하면서 ROWID를 부여(한번의 full scan)
2. B-TREE 구조 정렬
3. 검색
4. B-TREE에서 인덱스에 해당하는 ROWID반환
5. ROWID로 검색

일정한 속도가 보장된다.
그러나 insert 및 update의 요청으로 인한 인덱스 데이터가 누적되기
때문에 성능면에서 좋지 못하다.

### VIEW ###
실제 데이터값은 없으나 뷰를 통해서 원하는 데이터를 테이블처럼 다룰 수
있다.
사용이유 : 조인 횟수를 줄일 수 있고 원하는 데이터만 추려놓거나
보일 필요가 없는 데이터를 숨기기 위한 용도로 사용된다.
create view emp30 as
select e.employee_id, e.last_name, d.department_name from employees e
join departments d on e.department_id = d.department_id
where d.department_id = 30

### SEQUENECE ###
- 자동증가

create sequence 테이블명_컬럼명_seq
start with 1 //시작
increment by 2 //2씩 증가
maxvalue = 10000 //최대값
cycle //최대값을 찍고 처음으로 돌아감

create sequence emp07_empno_seq;

insert into emp07 values(emp07_empno_seq.nextval, 'kim', 'IT', 1234);
시퀀스는 한번 증가하면 되돌릴 수 없다.
글번호 카운팅
1. 시퀀스
2. 기존의 글 번호 + 1

댓글 없음:

댓글 쓰기