[Oracle] 시퀀스와 인덱스

hi·2022년 2월 9일
0

시퀀스란? 테이블 내의 유일한 숫자를 자동으로 생성

1. 시퀀스 생성

create sequence 시퀀스명
	[start with 시작숫자]
    [increment by 증감숫자]
    [maxvalue 최대값 | nomaxvalue]
    [minvalue 최소값 | nominvalue]
    [cycle | nocycle]
    [cache 시퀀스값 | nocache] 

시퀀스의 현재 값 , 다음 값

  • currval : 현재 값
    nextval : 다음 값

  • 사용순서 : nextval 👉 currval
    why? 다음 값을 생성해야 그 값을 currval에 대체하므로

select 시퀀스명.nextval from dual;
select 시퀀스명.currval from dual;   --daul 사용시 출력값 한 개

시퀀스를 기본 키에 접목하기

  1. 기본 키에 접목시킬 시퀀스 생성
  2. 테이블의 구조만 복사하여 새로운 테이블 생성
  3. 컬럼에 제약조건 추가
  4. 정보 입력

2. 시퀀스 수정

alter sequence 시퀀스명
    [increment by 증감숫자]
    [maxvalue 최대값 | nomaxvalue]
    [minvalue 최소값 | nominvalue]
    [cycle | nocycle]
    [cache 시퀀스값 | nocache]
  • 이미 생성된 시퀀스의 시작 값 변경 불가
    👉 제거 후 다시 생성해야 함

3. 시퀀스 제거

drop sequence 시퀀스명;

4. 인덱스

  • 검색 속도를 향상시키기 위해 사용

  • 사용자의 필요에 의해 직접 생성하거나 ,
    데이터 무결성을 확인하기 위해 기본 키와 유일 키는 자동 생성된다

  • 너무 많은 인덱스는 DB 성능에 좋지 않음

자동 생성된 인덱스 (데이터 사전에서) 확인

  • user_indexES
  • user_idn_columns
select index_name, table_name, column_name
from user_ind_columns
where table_name in ('EMPLOYEE', 'DEPARTMENT');

인덱스 생성

create index 인덱스명
on 테이블명(컬럼명);

인덱스 제거

drop index 인덱스명;

인덱스 재생성

인덱스가 생성된 후 새로운 행의 추가, 삭제, 수정될 수 있고 인덱스로 사용된 컬럼 값이 변경될 수 있다. 이럴 경우 해당 작업들이 일어날 때 인덱스도 재생성해야 한다.

alter index 인덱스명 rebuild;

5. 인덱스 종류

1. 유일한 값을 갖는지에 따라 고유 / 비 고유 인덱스
2. 인덱스를 구성하는 컬럼 개수에 따라 단일 / 결합 인덱스
3. 함수에 인덱스를 저장하는 함수 기반 인덱스

1) 고유 / 비 고유 인덱스

고유 인덱스
: 유일한 값을 갖는 컬럼에 대해 생성하는 인덱스 (기본키, 유일키)

비 고유 인덱스
: 중복된 데이터를 갖는 컬럼에 대해 생성하는 인덱스

👉 인덱스를 생성하며 unique 옵션을 추가하면 고유 인덱스가 생성,
생략하면 비고유 인덱스가 생성된다.

create unique index 인덱스명
on 테이블명(컬럼명);

2) 결합 인덱스

단일 인덱스
: 한 개의 컬럼으로 구성한 인덱스

결합 인덱스
: 두 개 이상의 컬럼으로 구성한 인덱스

create index 인덱스명
on 테이블명(컬럼1, 컬럼2);

3) 함수 기반 인덱스

: 수식이나 함수를 적용하여 만든 인덱스

create index 인덱스명
on 테이블명(컬럼*12);

0개의 댓글