데이터를 효과적으로 관리하기 위한 특별한 기능(ROWNUM, SEQUENCE, INDEX)
데이터의 순서를 기억해주는 ROWNUM
어떤 테이블을 생성하고 데이터를 입력하던지간에 데이터에는 순서가 정해지게 되는데, 그 순서를 기억하는 보이지 않는 컬럼이 ROWNUM 이다. ROWNUM은 데이터가 테이블에 입력되는 순서대로 순위가 정해지기 때문에 중간에 새로운 데이터가 들어가게 되면 데이터의 순서는 엉망이 되어버린다. 물론 데이터가 들어간 순서를 알고자 한다면 상관이 없지만... 그래서ROWNUM 의 경우는 인라인뷰로 생성하여 데이터를 정렬하고자 할때, 그리고 상위 몇번째까지의 데이터를 얻고자 할때 사용할 수 있다.
FROM (SELECT employee_id, last_name, hire_date, salary FROM employees ORDER BY salary DESC)
WHERE ROWNUM <= 5;
위의 쿼리문은 급여가 가장많은 상위 다섯명의 정보를 얻어올 수 있다.
자동으로 순서를 증가시켜주는 SEQUENCE
새로운 데이터가 입력될때마다 자동으로 일정 값 만큼 증가시키고 싶다면 시퀀스 기능을 사용할 수 있다. 시퀀스를 만들고 그것을 테이블의 컬럼에 적용을 하면, 데이터가 새롭게 입력될 때마다 숫자를 입력시키지 않아도 자동으로 순서번호가 들어가게 된다.
INSERT INTO 테이블명 VALUES(시퀀스명.NEXTVAL);
SELECT 시퀀스명.CURRVAR FROM DUAL;
시퀀스는 그 자체로 NUMBER 형태의 데이터 타입을 가지기 때문에, 데이터 타입에 맞추어서 시퀀스를 넣어주어야 한다. 일반적으로 시퀀스명은 테이블명_컬럼명_SEQ 의 형태를 갖게 된다. 위에서 첫번째 쿼리문은 시퀀스를 생성하게 되는데, 다양한 조건으로 시퀀스를 생성할 수 있다. START WITH 는 초기값을 나타내고, INCREMENT BY 는 증가값을 나타낸다. MAXVALUE 는 최대값을 나타낸는데, CYCLE 이 YES일 경우 최대값을 넘으면 다시 초기값부터 시작하게 된다. NEXTVAL은 시퀀스의 다음 값을 가져올 수 있고, CURRVAR은 시퀀스가 가지고 있는 현재의 값을 가져오게 된다. 시퀀스를 사용할때 주의해야 할 점은 데이터의 오류가 발생하더라도 시퀀스 번호는 증가한다는 것이다.그리고 그 시퀀스는 다시 되돌릴 수 없다!!
데이터를 빠르게 찾는 방법 INDEX.
일반적으로 데이터를 찾기 위해서는 순차적으로 검색을 하게 된다. 이럴경우, 찾고자 하는 데이터가 테이블의 가장 나중에 있다면 굉장히 많은 시간이 걸리게 될 것이다. 이러한 문제점을 해결하기 위한 방법중의 하나가 인덱스를 사용하는 것이다. 인덱스는 B트리를 사용하여 어떠한 데이터든지 동일한 횟수만에 접근을 하는것이 가능하다. 인덱스를 이용한 데이터의 검색 속도는 그것을 사용하지 않았을때와는 비교하지 못할만큼 비약적이기 때문에, 대용량의 데이터를 사용하는 경우라면 인덱스를 사용하는 것이 일반적이다. 인덱스는 각 데이터를 구분짓는 유일한 데이터여야 하기때문에 일반적으로 기본키를 인덱스로 적용하게 된다.
CREATE 인덱스명 ON 테이블명(컬럼명);
위와 같이 인덱스를 적용하게 되면 좀더 빠르게 데이터에 접근을 하는 것이 가능하다. 일반적으로 인덱스명은 INDEX_테이블명_컬럼명 의 형식으로 생성하게 된다.
'Dev Center > DB + JSP start' 카테고리의 다른 글
데이터를 효과적으로 관리하기 위한 특별한 기능(ROWNUM, SEQUENCE, INDEX) (0) | 2010.08.26 |
---|---|
데이터에 안전하게 접근 하는 방법, 뷰. (0) | 2010.08.25 |
데이터베이스의 작업 단위 트렌잭션 & 테이블 복사 (0) | 2010.08.24 |
이미 만들어진 테이블. (0) | 2010.08.23 |
좀더 다양한 방법으로 조인한기.(셀프조인, 서브쿼리) (0) | 2010.08.22 |
기본적인 조인연산. (0) | 2010.08.21 |
댓글을 달아 주세요