INDEX의 의미
DBMS에서 검색 속도를 향상 시키기 위해 사용하는 기술 중 하나입니다. INDEX는 색인이라고 할 수 있습니다. 하나의 테이블의 컬럼을 색인화하여 검색합니다. 해당 테이블의 레코드를 전체 검색하는 것이 아니라 색인화 되어 있는 INDEX 파일을 검색합니다. 이렇게 해당 파일을 검색하면, 검색 속도를 향상 시킬 수 있습니다. 이런 인덱스는 트리 구조로 색인화합니다. RDBMS에서 사용하는 인덱스는 균형 서치 트리를 사용합니다.
INDEX의 원리
인덱스를 해당 컬럼에 할당합니다. 그러면, 테이블 생성시 만들어진 MYD, MYI, FRM 3개의 파일이 있습니다. 이 중에서 MYI에 해당 column을 indexing하여 저장합니다. 물론 인덱스를 사용하지 않을 경우에는 해당 파일은 비어있게 됩니다. 그래서 인덱스를 해당 컬럼에 만들게 되면 해당 컬럼을 따로 인덱싱합니다. 이러한 인덱싱을 통해 MYI 파일에 입력하게 됩니다.
INDEX의 장점
인덱스를 사용하지 않은 조회 쿼리보다 인덱스를 사용한 쿼리의 검색속도는 월등히 차이가 납니다. 약 6.5배 정도가 차이나게 되고 이는 데이터 양이 많아질수록 더욱 차이가 나게 됩니다.
INDEX의 단점
디스크 용량이 감소하게 됩니다. 인덱스를 사용하면 MYI 파일이 추가로 입력되게 됩니다. 따라서 디스크 용량이 늘어나게 됩니다. 즉, 모든 컬럼을 인덱스 하게되면 데이터 파일이 생성된 것보다 인덱스 파일이 더 커지는 경우도 있을 수 있습니다.
따라서 남용하게되면 좋지 않을 수 있다. 인덱스를 사용해도 디스크 용량을 염려할 정도가 아닌 경우도 있다. 그에 비해 성능의 향상은 가져올 수 있으므로 좋은 점이 더욱 크다고 할 수 있습니다.
삽입, 업데이트의 속도가 저하되게 됩니다. 해당 테이블에 인덱스를 주게 되면 삽입, 업데이트가 조금 느려지게 됩니다. 매번 해당 테이블과 테이블의 인덱스를 검사해야 합니다. 따라서 해당 테이블만 검사했을 떄보다 느리게 됩니다.
INDEX의 목적
인덱스의 목적은 해당 DBMS의 검색 속도를 높이는 것입니다. 그런데 조회 쿼리의 조건문이나 조인 예약어를 사용했을때만 인덱스를 사용합니다. 따라서 조회 쿼리의 검색 속도를 빠르게 하는 것이 목적이라 할 수 있습니다.
삭제, 삽입, 업데이트 쿼리에는 해당 하지 않습니다. 인덱스 사용 시 오히려 느려집니다.
INDEX를 사용
데이터 양이 많은 프로젝트를 진행하는 경우 사용하면 좋습니다. 또, 검색이 변경보다 빈번한 경우에 적용하면 좋습니다. 인덱스를 걸고자 하는 필드의 값이 다양한 값을 가지는 경우에도 활용하면 좋습니다. 따라서 조건절을 자주 참조하는 컬럼이나 참조키가 설정되어 있는 열에 사용하면 좋습니다. 또, 조인이 설정되어 있는 열이나 범위 검색이 설정되어 있는 컬럼, 정렬하는 열, 그룹화하는 열 등에 사용하는 것이 좋습니다.
조건절에서 특정한 함수를 사용하는 경우에는 효과가 없습니다. 또 긴 문자열을 사용하는 경우에는 범위가 커서 효과가 없습니다. 데이터를 찾는 속보다 변경이나 삽입의 속도가 더 중요하는 경우에는 인덱스를 사용하는 것을 지양해야 합니다.
추가적으로 유의해야 할 점이 있습니다. 인덱스를 사용하는 필드는 널값이 존재하면 안됩니다. 한 테이블에는 5개 이상의 인덱스 사용을 권장하지는 않습니다. 인덱스를 사용한 필드를 조건에서 연산, 가공하여 사용합니다. 그런 경우에는, 인덱스는 효과가 없습니다.
'SW > 면접' 카테고리의 다른 글
SW 면접 : 데이터베이스 : Trigger(트리거) 개념, 장점 (0) | 2020.08.31 |
---|---|
SW 면접 : 데이터베이스 : 클러스터드 인덱스, 넌클러스터드 인덱스 : 개념, 차이점, 성능 비교 (0) | 2020.08.26 |
SW면접 : 데이터베이스 : Primary Key와 Unique Key : 개념, 차이 (0) | 2020.08.21 |
SW 면접 : 데이터베이스 : 트랜잭션 개념, 특징 (0) | 2020.08.20 |
SW 면접 : 데이터 베이스 : DDL, DML, DCL 개념과 차이점 (1) | 2020.08.17 |