on
[Database] 인덱스(Index)가 뭘까?
[Database] 인덱스(Index)가 뭘까?
Introduction
아직 한번도 사용하지 않았던 Index. 유튜브나 기술면접 예상질문을 보면 Index가 나온다. 그래서 실제로 사용하기 전에 개념에 대해 알아보자.
인덱스란?
인덱스는 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.
대부분 책의 색인에 비유된다. 만약 책에서 원하는 내용을 찾는다고 했을 때, 책의 모든 페이지를 읽는 것은 굉장히 오랜 시간이 걸린다. 하지만 책의 색인을 보면 해당 단어가 어느 페이지에 있는 것을 확인할 수 있어서 그 페이지에서 내용을 찾으면 보다 빠르게 찾을 수 있다.
'스프링 부트와 AWS로 혼자 구현하는 웹 서비스'의 색인
인덱스가 왜 빠를까?
한 컬럼에서 특정 단어로 조회한다고 가정했을 때, 테이블의 모든 row를 조회를 하여 특정 단어가 들어가 있는 것을 반환할 것이다. 이렇게 되면 테이블을 Full Scan하게 되어 트래픽에 따라 성능이 저하될 수 밖에 없다. 하지만 해당 컬럼을 Index Table을 따로 만들어 조회하게 되면, Index 테이블에 있는 값들로 결과를 조회해서 온다.
인덱스의 장점
테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
전반적인 시스템 부하를 줄일 수 있다.
인덱스의 단점
인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
인덱스를 관리하는 추가 작업이 필요하다
인덱스를 잘못 사용할 경우 오히려 성능 저하를 초래할 수 있다.
인덱스를 사용하면 좋은 경우
규모가 작지 않은 테이블
INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
데이터의 중복도가 낮은 컬럼
이때까지 사용을 하지 않았던 Database Index에 대해 알아보았다.
개념을 알아보니 대충 어떤 느낌으로 작동하는지 알게 되었지만 직접 사용해보지 않고는 알 수 없다.
기회가 되면 사용해보고 다시 글을 써보도록 하겠다.
다음 글에는 인덱스에 따라오는 특징인 카디널리티에 대해 알아보겠다.
from http://jortier.tistory.com/71 by ccl(A) rewrite - 2021-12-31 18:43:10