SQL_ 인덱스(INDEX) / 시퀀스(Sequence)

김지영·2024년 3월 7일

SQL 기본

목록 보기
7/10

1. 인덱스(Index) ★

  • 용도: 조회속도 향상을 위해 컬럼에 인덱스를 생성함
  • 사용: 컬럼에 인덱스를 지정해서 생성하면 됨
  • 기본키(PK) : (특징) 유일(중복금지) + NOT NULL + 자동인덱스생성

2. 인덱스를 만들어야 하는 기준 ★

  • 1) WHERE(조건절) 에 해당 컬럼이 많이 등장할 경우 인덱스 생성 고려
  • 2) 테이블에 행의 개수가 굉장히 많을 경우(데이터 건수가 많을경우)
    예) 10만건이상
  • 3) 주로 테이블 조인(2개이상)의 공통컬럼으로 사용될 경우 인덱스 생성 고려

3. 인덱스 사용법

① 인덱스 생성

⊙ 사용법: CREATE INDEX 인덱스명 ON 테이블명(컬럼명);

CREATE INDEX IX_EMPLOYEE_ENAME ON EMPLOYEE(ENAME);

② 인덱스 삭제

⊙ 사용법: DROP INDEX 인덱스명;

DROP INDEX IX_EMPLOYEE_ENAME;

③ 결합 인덱스 생성

⊙ 사용법: CREATE INDEX 인덱스명 ON 테이블명(컬럼, 컬럼2, ...);

CREATE INDEX IX_DEPARTMENT_DNAME_LOC ON DEPARTMENT(DNAME, LOC);

5. 함수 인덱스

  • SQL 함수 또는 산술식 에 인덱스 걸기

① 생성

⊙ 사용법: CREATE INDEX 인덱스명 ON 테이블명(컬럼, 컬럼2, ...);

CREATE INDEX IX_DEPARTMENT_DNAME_LOC ON DEPARTMENT(DNAME, LOC);

◈ 예제) 아래의 sql 문이 자바에서 실행되는데 느리다고 합니다. 개선해주세요

SELECT * FROM EMPLOYEE
WHERE SALARY = SALARY * 12;

5. (참고) 기타인덱스

1) 결합 인덱스 : 컬럼 여러개를 동시에 인덱스 1개로 생성
◈ 예제 ) 아래의 sql 문이 자바에서 실행되는데 느리다고 합니다. 개선해주세요

SELECT * FROM DEPARTMENT
WHERE DNAME = 'SALES'
AND   LOC   = 'NEW YORK'
  • 속도 느림 대상 SQL 문
SELECT * FROM EMPLOYEE
WHERE ENAME LIKE 'SCO%'; -- 조건식이 인덱스를 만들 대상임
  • 시스템 테이블 : 데이터 사전(DICTIONARY VIEW)
    -USER_IND_COLUMNS
    -DBA(관리자) 많이 사용, 개발자(참고)
SELECT *
FROM USER_IND_COLUMNS
WHERE TABLE_NAME IN ('EMPLOYEE','DEPARTMENT');

6. 시퀀스 (Sequence)

  • Sequence(시퀀스) : 호출(실행)할때마다 자동적으로 숫자를 증가시키는 것(객체)
    예) 1씩 증가 , 2씩 증가
    ▶ 용도) 기본키(PK:유일 + not null) 용도 :
    -시퀀스는 숫자가 증가하므로 중복발생없음, null 아님
    -활용 예) 자유게시판 : No(1 ~ n), 고객 : 고객No(1 ~ n)
    -용어 : 채번 : 자동적으로 1씩 증가시키는 값

◈ 예제 1) SAMPLE_SEQ 시퀀스를 1부터 시작해서 10씩 증가시키는 시퀀스 생성

⊙ 사용법: CREATE SEQUENCE 시퀀스명

CREATE SEQUENCE 시퀀스명
-- INCREMENT BY 증가값
-- START WITH 시작값
-- MINVALUE   최소값 [생략가능]
-- MAXVALUE   최대값 [생략가능]
CREATE SEQUENCE SAMPLE_SEQ

② INSERT 문 생성

INSERT INTO 테이블명(컬럼명, 컬럼명2, ...)
VALUES(시퀀스명.NEXTVAL,2, ...);

③ Insert 문에 사용하기

INSERT INTO EMP01 (EMPNO, ENAME, HIREDATE)
VALUES(SQ_EMP.NEXTVAL, 'ACCOUNTING', '2024-03-07' );

④ 시퀀스 삭제
⊙ 사용법: DROP SEQUENCE 시퀀스명;

DROP SEQUENCE DEPT_TEMP_SEQ;
profile
그냥 졍이라구하자

0개의 댓글