Language/SQL

[DATABASE] SEQUENCE, INDEX

simDev1234 2022. 4. 21. 13:38

■ 시퀀스란?

  오라클에서 순서를 지정해주는 객체   **오라클에서만 사용 가능

 

[1] 시퀀스의 생성

CREATE SEQUENCE seq_테이블명_idx START WITH 1 INCREMENT BY 1;
-- 또는 
CREATE SEQUENCE seq_테이블명_idx;

 

[2] 데이터 추가 시 시퀀스 추가 - 시퀀스명.nextVal

INSERT INTO sungtb VALUES(seq_sungtb_idx.nextVal, '일길동', 90, 80, 70);

 

[3] 시퀀스의 삭제

DROP SEQUENCE seq_sungtb_idx

 

■ 인덱스란?

  데이터베이스에서 데이터를 빠르게 탐색하기 위해 붙인 색인(포인터)

 

인덱스를 사용해야 하는 경우 

- 데이터 양이 많고 검색이 수정보다 빈번한 경우

- 도메인의 값이 다양한 값을 가지는 경우 

 

인덱스를 사용할 때 주의할 점

- 인덱스를 사용하는 열에 NULL이 지나치게 많으면 효율이 떨어진다.

 

 

■ NVL함수를 통해 인덱스 형성하기

[문법]

NVL(MAX(idx),0)+1
--> (1) Max(idx)는 idx칼럼에서 가장 큰 수를 반환
--> (2) NVL(a , 0)  :  a라는 칼럼에 NULL이 없으면 (or a라는 데이터가 있으면) 해당 데이터 반환
                    -- 그렇지 않고 NULL만 있으면 0으로 데이터를 대체한다.
    --> 곧, idx에 데이터가 없으면 0을 넣고, 있으면 그 데이터에 +1을 하겠다.

SELECT NVL(MAX(idx), 0) + 1 FROM book;
--> book이라는 테이블에서 가장 큰 인덱스 값을 가져오고 +1을 한다.

 

[예시]

CREATE TABLE book
(
   idx   INT,
   name  CHAR(3 CHAR) NOT NULL,
   price INT
);

ALTER TABLE book 
  ADD CONSTRAINT pk_book_idx PRIMARY KEY(idx);
  
-- SAMPLE DATA 입력
INSERT INTO book VALUES((SELECT nvl(MAX(idx), 0) + 1 FROM book),'Java',20000);
INSERT INTO book VALUES((SELECT nvl(MAX(idx), 0) + 1 FROM book),'Oracle',30000);
INSERT INTO book VALUES((SELECT nvl(MAX(idx), 0) + 1 FROM book),'HTML',24000);
INSERT INTO book VALUES((SELECT nvl(MAX(idx), 0) + 1 FROM book),'JSP',22000);

 

 

 

[출처]

- 인덱스 참조

https://ltk3934.tistory.com/67

https://coding-factory.tistory.com/746

- 시퀀스 참조

https://coding-factory.tistory.com/420

https://kerpect.tistory.com/17