-
[데이터베이스] 인덱스 정리개발/데이터베이스 2021. 11. 21. 22:55
인덱스란
SQL 명령문의 처리, 테이블에 대한 검색 성능의 속도를 향상시켜주는 자료구조입니다.
책으로 예를 들었을 때, 첫 페이지부터 한 장씩 넘겨가면서 전체를 확인하며 찾아가는 것 보다 원하는 페이지를 찾아가는 것이 더 빠릅니다. 인덱스는 책 맨 뒤에 있는 색인(인덱스, 찾아보기)에서 해당 단어(테이블)를 찾아 그 페이지로 이동하여 속도면에서 유리하게 해줍니다.인덱스의 관리
DBMS는 index를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다. 그렇기 때문에 인덱스가 적용된 컬럼에 INSERT, UPDATE, DELETE가 수행된다면 각각 다음과 같은 연산을 추가적으로 해주어야 하며 그에 따른 오버헤드가 발생한다.
- INSERT : 새로운 데이터에 대한 인덱스를 추가한다.
- DELETE : 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행한다.
- UPDATE : 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가한다.장단점
장점
- 검색 속도가 빨라진다. (조건 검색 Where절, Order by절, MIN,MAX의 효율성이 좋아진다.)
- 시스템에 걸리는 부하를 줄여서 시스템 전체 성능을 향상시킨다.단점
- 인덱스를 위한 추가적인 공간이 필요하다.
- 인덱스를 생성하는 데 시간이 걸린다.
- 데이터의 변경 작업(INSERT/UPDATE/DELETE)이 자주 일어날 경우에는 오히려 성능이 저하된다.
인덱스가 존재할 때 유리한 경우
- 규모가 작지 않은 테이블
- INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
- JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
- 데이터의 중복도가 낮은(분포도가 좋은) 컬럼
- '=', 'in' 조건 으로 항상 비교되는 컬럼
인덱스 사용시 주의 사항
- AND 연산자는 각 조건들이 읽어와야 할 ROW 수를 줄이는 역할을 하지만, OR 연산자는 비교해야 할 ROW가 더 늘어나기 떄문에 주의가 필요하다
- 인덱스로 사용된 컬럼값 그대로 사용해야만 인덱스가 사용된다.
- where num * 5 > 10; 는 인덱스가 사용 안되지만, where num > 10 / 5; 는 인덱스를 사용한다.
- 컬럼이 문자열인데 숫자로 조회하면 타입이 다르기 때문에 인덱스가 사용되지 않는다. - between, like, <. >등 범위 조건은 해당 컬럼은 인덱스를 타지만, 그 뒤 인덱스 컬럼들은 인덱스가 사용되지 않는다.
- null 값의 경우, is null 조건으로 인덱스 레인지 스캔이 가능합니다.
- 기본키, 유일성 제약이 부여된 열에는 불필요하다.
'개발 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 집합연산자 정리 (0) 2021.12.16 [데이터베이스] 시퀀스 정리 (1) 2021.12.05 [데이터베이스] 트리거 정리 (0) 2021.11.26 [데이터베이스] 정규화(Normalization) 정리 (0) 2021.11.15 [데이터베이스] 키(Key)에 대한 정리 (0) 2021.11.07