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 |
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 |