2023. 12. 26. 14:59ㆍ데이터베이스
데이터베이스에서 인덱스란 데이터베이스 테이블에 대한 검색 성능을 높여주는 자료구조입니다 특정 컬럼에 인덱스를 생성하면 해당 컬럼의 데이터들을 정렬해서 별도의 메모리 공간에 데이터 물리적 주소와 함께 저장됩니다 또한 인덱스 생성 시 오름차순으로 정렬하기 때문에 정렬된 주소체계라고 표현할 수 있습니다 만약 우리가 책에서 원하는 내용을 찾고자 한다면 책의 모든 페이즈를 찾아보는 것은 오랜 시간이 걸립니다 그렇기 때문에 책의 저자들은 책 맨 앞 또는 맨 뒤에 색인을 추가합니다 데이터베이스의 index는 책의 색인과 같은 역할이라고 볼 수 있습니다
인덱스(Index의 자료구조)
인덱스는 여러 자료구조를 이용하여 구현할 수 있습니다 대표적인 자료구조로는 해시 테이블과 B+Tree가 있습니다
해시 테이블(Hash Table)
해시테이블은 컬럼의 값과 물리적 주소를 key, value의 한 쌍으로 저장하는 자료구조입니다 하지만 해시테이블은 실제로 인덱스에서 잘 사용하지 않습니다 이유로는 해시테이블은 등호(=) 연산에 최적화되어있기 때문입니다 데이터들은 정렬되어 있지 않으므로 특정 기준보다 크거나 작은 값을 빠른 시간 내에 찾을 수 없습니다 그리고 해시 함수는 값이 1이라도 달라지면 완전 다른 해시값을 생성하기 때문에 이러한 특성에 등호 연산이 자주 사용되는 데이터베이스 검색을 위해서는 해시 테이블이 적합하지 않습니다
B+Tree
B+Tree는 대부분의 데이터베이스관리시스템 그리고 오라클에서 특히 중정적으로 사용하는 가정 보편적인 인덱스입니다 B+Tree는데이터베이스의 인덱스를 위해 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조입니다 B+Tree는 모든 노드에 value를 저장했던 BTree와 다른 특정을 가지고 있습니다 구조는 Root Node(기준), Branch Node(중간), Leaf Node(말단)으로 구성되며 계층적인 구조를 가지고 있습니다
인덱스(Index)의 장점
데이터베이스에서 인덱스를 사용할때 장점은 데이터가 정렬되어 있기 때문에 테이블에서 검색과 정렬 속도를 향상합니다 각 테이블의 행의 고유성을 강화할 수 있습니다 그리고 전반적인 시스템의 부하를 줄일 수 있습니다
인덱스(Index)를 사용하면 좋은 경우
규모가 작지 않은 테이블
INSERT,UPDATE,DELETE가 자주 발생하지 않는 컬럼
JOIN.WHERE, ORDER BY가 자주 발생하는 컬럼
데이터의 중복도가 낮은 컬럼
인덱스를 사용하는 것만큼이나 인덱스를 관리해 주는 것도 중요합니다 사용하지 않는 인덱스는 바로바로 제거를 해주는 게 좋습니다
인덱스(Index)의 단점
데이터베이스에서 인덱스 사용 시 단점으로는 여러 가지 있지만 가장 큰 문제로는 정렬된 상태를 계속 유지시켜야 한다는 점입니다 인덱스가 적용된 컬럼에서 정렬을 변경시키는 INSERT, UPDATEM, DELETE 명령어가 수행된다면 계속 정렬을 해주어야 합니다 그에 따른 부하가 발생하기 때문입니다 그리고 무조건 인덱스 스캔이 좋은 것만은 아닙니다 검색을 주로 하는 테이블에 인덱스를 생성하는 것은 좋지만 무조건 인덱스가 검색에 좋은 것은 아닙니다 예를 들어 1개의 데이터가 있는 테이블과 만개의 데이터가 있는 테이블이 있다고 할 때 만개의 데이터가 들어있는 테이블이라면 풀 스캔보단 인덱스의 스캔이 유리하지만 1개의 데이터가 들어있는 테이블은 인덱스 스캔보다 풀 스캔이 더 빠릅니다 그리고 속도 향상을 위해 인덱스를 많이 만드는 것은 좋지 않습니다 인덱스 관리를 위해서 데이터베이스의 약 10%에 해당하는 저장공간이 추가로 필요합니다 때문에 너무 많이 인덱스를 생성한다면 하나의 쿼리문을 빠르게 만들 수는 있지만 전체적인 데이터베이스의 성능 부하를 초래합니다 그리하여 무조건적인 인덱스 생성보다는 SQL문을 효율적으로 사용하고 인덱스 생성은 마지막 수단으로 사용하는 게 좋겠습니다
'데이터베이스' 카테고리의 다른 글
데이터베이스에서 데이터모델링이란 (0) | 2023.12.28 |
---|---|
데이터베이스 트랜잭션(TCL)이란 (0) | 2023.12.25 |
데이터베이스 언어 정의와 종류(DLL,DML,DCL) (0) | 2023.12.24 |
데이터베이스의 구조 (0) | 2023.12.23 |
데이터베이스의 기본개념 (1) | 2023.12.22 |