블로그 이미지
'무른모'란 부드럽다라는 뜻을 가진 '무르다'라는 말과 도구, 연장을 뜻하는 '연모'라는 순 우리말의 합성어로 소프트웨어를 말합니다. seanhigher

카테고리

분류 전체보기 (161)
Blog srart (16)
Dev Center (94)
Real Life (13)
Mac life (21)
Naver life (17)
Total485,906
Today17
Yesterday190
데이터베이스에는 수많은 데이터들이 수도없이 들락날락 거린다. 이렇게 수도없이 변경되는 데이터를 효율적으로, 그리고 일관성있게 관리한다는 것은 굉장히 어려운 일중 하나라고 할 수있다. 이런 어려운 일을 도와주는 특별한 기능들이 오라클 속에는 들어있다.



데이터의 순서를 기억해주는 ROWNUM
어떤 테이블을 생성하고 데이터를 입력하던지간에 데이터에는 순서가 정해지게 되는데, 그 순서를 기억하는 보이지 않는 컬럼이 ROWNUM 이다. ROWNUM은 데이터가 테이블에 입력되는 순서대로 순위가 정해지기 때문에 중간에 새로운 데이터가 들어가게 되면 데이터의 순서는 엉망이 되어버린다. 물론 데이터가 들어간 순서를 알고자 한다면 상관이 없지만... 그래서ROWNUM 의 경우는 인라인뷰로 생성하여 데이터를 정렬하고자 할때, 그리고 상위 몇번째까지의 데이터를 얻고자 할때 사용할 수 있다.

SELECT employee_id, last_name, hire_date, salary
    FROM (SELECT employee_id, last_name, hire_date, salary FROM employees ORDER BY salary DESC)
        WHERE ROWNUM <= 5;

위의 쿼리문은 급여가 가장많은 상위 다섯명의 정보를 얻어올 수 있다.


자동으로 순서를 증가시켜주는 SEQUENCE
새로운 데이터가 입력될때마다 자동으로 일정 값 만큼 증가시키고 싶다면 시퀀스 기능을 사용할 수 있다. 시퀀스를 만들고 그것을 테이블의 컬럼에 적용을 하면, 데이터가 새롭게 입력될 때마다 숫자를 입력시키지 않아도 자동으로 순서번호가 들어가게 된다.

CREATE SEQUENCE 시퀀스명;
INSERT INTO 테이블명 VALUES(시퀀스명.NEXTVAL);
SELECT 시퀀스명.CURRVAR FROM DUAL;

시퀀스는 그 자체로 NUMBER 형태의 데이터 타입을 가지기 때문에, 데이터 타입에 맞추어서 시퀀스를 넣어주어야 한다. 일반적으로 시퀀스명은 테이블명_컬럼명_SEQ 의 형태를 갖게 된다. 위에서 첫번째 쿼리문은 시퀀스를 생성하게 되는데, 다양한 조건으로 시퀀스를 생성할 수 있다. START WITH 는 초기값을 나타내고, INCREMENT BY 는 증가값을 나타낸다. MAXVALUE 는 최대값을 나타낸는데, CYCLE 이 YES일 경우 최대값을 넘으면 다시 초기값부터 시작하게 된다. NEXTVAL은 시퀀스의 다음 값을 가져올 수 있고, CURRVAR은 시퀀스가 가지고 있는 현재의 값을 가져오게 된다. 시퀀스를 사용할때 주의해야 할 점은 데이터의 오류가 발생하더라도 시퀀스 번호는 증가한다는 것이다.그리고 그 시퀀스는 다시 되돌릴 수 없다!!


데이터를 빠르게 찾는 방법 INDEX.
일반적으로 데이터를 찾기 위해서는 순차적으로 검색을 하게 된다. 이럴경우, 찾고자 하는 데이터가 테이블의 가장 나중에 있다면 굉장히 많은 시간이 걸리게 될 것이다. 이러한 문제점을 해결하기 위한 방법중의 하나가 인덱스를 사용하는 것이다. 인덱스는 B트리를 사용하여 어떠한 데이터든지 동일한 횟수만에 접근을 하는것이 가능하다. 인덱스를 이용한 데이터의 검색 속도는 그것을 사용하지 않았을때와는 비교하지 못할만큼 비약적이기 때문에, 대용량의 데이터를 사용하는 경우라면 인덱스를 사용하는 것이 일반적이다. 인덱스는 각 데이터를 구분짓는 유일한 데이터여야 하기때문에 일반적으로 기본키를 인덱스로 적용하게 된다.

CREATE INDEX 인덱스명;
CREATE 인덱스명 ON 테이블명(컬럼명);

위와 같이 인덱스를 적용하게 되면 좀더 빠르게 데이터에 접근을 하는 것이 가능하다. 일반적으로 인덱스명은 INDEX_테이블명_컬럼명 의 형식으로 생성하게 된다.

저작자 표시
신고
Creative Commons License
Creative Commons License
Posted by seanhigher

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

티스토리 툴바