오라클 비긴즈 10 ( INDEX )

2023. 2. 20. 17:55· '국비지원'의 시작

 INDEX ( 색인 ) 란 무엇인가?

INDEX 는 예를 들어 설명하면 아주 두꺼운 책 뒤에 나오는 찾아보기라고 생각하면 도움이 된다. 책 뒤에 '찾아보기'의 특징은 정렬이 되어 있다는 것인데, INDEX 에 저장된 데이터도 이와 마찬가지고 정렬되어서 저장되게 한다. 그렇다면, 이러한 INDEX 를 사용하는 이유는 무엇일까요? INDEX 를 사용하는 이유는 단순합니다. SQL 문이 작동하는 속도를 빠르게 하기 위해서 입니다. 그렇다면, 어떤 컬럼에 INDEX 를 생성해야 속도를 더 빠르게 만들 수 있을 까요?  컬럼을 선택하는 기준은 다음과 같습니다. WHERE 절에서 자주 사용되어진 컬럼에 만들어야 합니다. 그리고, 선택도( Selectivity ) 가 높은 컬럼에 만들어야 합니다. 선택도가 높다는 것은  고유한 데이터일수록 선택도가 높아집니다. 또한, 카디널리티( Cardinality ) 가 높은 컬럼에 만들어야 합니다. 이는 선택도와 비슷한 의미이기도 합니다. 카디널리티가 높다는 것은 중복도가 낮아 고유한 데이터일수록 카디널리티가 높아집니다. 

INDEX 의 종류로는 Unique 한 index 와 Non-Unique 한 index 가 존재합니다. 그렇다면 , 아래에서 이를 어떻게 실행하는 지 살펴보도록 하겠습니다.

    -- [ 문 법 1] 
    -- create unique index 인덱스명 
    -- on 해당테이블명 ( 컬럼명 asc or desc ); 
    create unique index idx_tbl_student_1_hakbun
    on tbl_student_1 ( hakbun asc )  ;
    -- [실행값] Index IDX_TBL_STUDENT_1_HAKBUN이(가) 생성되었습니다.
  -- [ 문 법 2] 
  -- create index 인덱스명 
  -- on 해당테이블명 ( 컬럼명 asc or desc ); 
    
    create index idx_tbl_student_1_name 
    on tbl_student_1 ( name asc )  ;

문법1은 Unique 한 INDEX를 만드는 방법이고 , 문법2는 Non-unique 한 INDEX를 만드는 방법입니다.  어떤 컬럼에 Unique 한 INDEX를 생성하면 그 컬럼에 들어오는 값이  이미 컬럼에 있는 갑과 중복될 경우 들어올 수가 없게 된다. 즉 , 오로지 고유한 값만 들어올 수 있게 된다. 반면에, Non_unique한 INDEX를 생성하면 그 컬럼에 들어오는 값이 중복된 값이여도 상관없이 들어 올 수 있게 됩니다. 

INDEX 에 대해 공부하면서, 그렇다면, 모든 컬럼에 추가하면서 속도를 올리면 되는 것이 아닌가하는 생각이 들었습니다. 그러나 그렇지 않다. INDEX 가 많다고 해서 결코 좋은 것이 아니다. 그러하여, 테이블당 INDEX 의 개수는 최소한의 개수로 만들어져야 한다. 

그렇다면, INDEX 의 단점에 대해서 자세히 알아보도록 하자. DML( insert , update , delete ) 가 빈번하게 발생하는 테이블에  INDEX 가 생성되어있으면,   DML( insert , update , delete )  작업으로 인해 INDEX에 대해 나쁜 결과를 초래한다.  INDEX 가 생성되어진 테이블에 INSERT 를 하면 Index Split ( 인덱스 깨어짐 ) 이 발생하게 된다.  Index Split 가 발생하면 오히려 INDEX가 없을 때보다도 INSERT 의 속도가 떨어지게 되는 현상이 생기게 된다.  

Index Split 란 무엇이고, 이에 대한 해결방법은 무엇인가?

Index Split 란 INDEX 의 Block( 블럭 ) 들이 1개에서 2개로 나뉘어지는 현상을 말하는데, 이러한 현상이 발생하는 이유는 INDEX 를 만들게 되면 ,컬럼의 값들이 정렬이 저장되기 때문이다. DDL 문을 작업할 경우, 각각이 정렬이 되어있는 것들 사이에 추가를 하거나, 중간에 있는 것을 삭제하기 때문이다. 

그렇다면 , 이러한 현상을 해결하기 위해서는 Index Rebuild 를 해줌으로써 , select 해올 때의 검색속도를 다시 빠르게 해줄 수 있다. 그렇다면, 마지막으로 Index Rebuild 하는 방법을 알려드리면서,  글을 마치도록 하겠습니다. 

		---- *** ==== Index Rebuild( 인덱스 재건축 ) 하기 ==== *** ----
    -- 인덱스 밸런스가 대략 60% 정도 깨진 IDX_TBL_STUDENT_1_NAME 을 Index Rebuild 
    -- ( 인덱스 재건축 ) 을 하겠습니다. 
    alter index IDX_TBL_STUDENT_1_NAME rebuild ;
    -- Index IDX_TBL_STUDENT_1_NAME이(가) 변경되었습니다.

''국비지원'의 시작' 카테고리의 다른 글

자바 & 오라클 01 ( 자바를 통해 SQL문 실행하기 )  (0) 2023.02.21
오라클 비긴즈 11 ( 정규화 과정 )  (0) 2023.02.21
오라클 비긴즈 09 ( PL/SQL 문과 사용자 정의 함수( Function ) )  (0) 2023.02.16
오라클 비긴즈 08 ( Constraints ( 제약 ) )  (0) 2023.02.15
오라클 비긴즈 07 ( SQL (Structure Query Language) )  (0) 2023.02.14
''국비지원'의 시작' 카테고리의 다른 글
  • 자바 & 오라클 01 ( 자바를 통해 SQL문 실행하기 )
  • 오라클 비긴즈 11 ( 정규화 과정 )
  • 오라클 비긴즈 09 ( PL/SQL 문과 사용자 정의 함수( Function ) )
  • 오라클 비긴즈 08 ( Constraints ( 제약 ) )
개발할 결심
개발할 결심
백엔드와 프론트엔드의 조화를 이루는 프론트엔드 개발자 입니다.
개발할 결심백엔드와 프론트엔드의 조화를 이루는 프론트엔드 개발자 입니다.
개발할 결심
개발할 결심
개발할 결심
전체
오늘
어제
  • 분류 전체보기
    • '국비지원'의 시작
    • '취준' 시작

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 개발자
  • 백엔드
  • 국비지원
  • 비전공자
  • 이뮤터블 메서드
  • 국비지원학원
  • 수동적X
  • fetcting data with Effects
  • 오라클
  • 생성자의오버로딩
  • 자바
  • Java
  • react
  • 비동기
  • 자바스크립트
  • 리액트
  • 프론트엔드
  • 국비it학원
  • SQL
  • 쌍용강북교육센터

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
개발할 결심
오라클 비긴즈 10 ( INDEX )
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.