[TIL 3주차 - 230704] - DB INDEX

프림·2023년 7월 5일
0

항해 TIL

목록 보기
8/19
post-thumbnail

1.고민

mongoDB를 사용해 게시글 삭제 기능을 구현하는 도중 유저의 어떤 정보를 이용해서 토큰 인증을 할지 고민이 되었다. 스키마 생성시 기본적으로 제공하는 _id 로 인증을 할지 아니면 유저의 닉네임(중복x)으로 인증을 할지 고민이 되었다.
DB 값을 조회할 때 어떤 데이터를 넣어야 더 빠를까?

2.시도

검색 결과 DB의 인덱스를 알게 되어 살펴봤다

인덱스

인덱스란 추가적인 쓰기 작업과 저장공간을 활용해 데이터베이스의 테이블 검색 속도를 높여주는 자료구조다.

인덱스를 활용하면 SELECT 뿐만 아니라 UPDATE, DELETE 이 둘의 성능도 향상된다고 한다. 그 이유는 얘네(?) 작업을 하기 위해서 조회가 선행되어야 하기 때문.

만약 인덱스를 사용하지 않는다면? 전체 검색 해야됨. 속도는 당연 훨씬 느리지.

DB의 인덱스 관리란?

DB는 인덱스는 항상 정렬된 상태를 유지해야 한다.그래야 값을 빠르게 탐색할 수 있으니깐. 그렇기 때문에 INSERT, UPDATE, DELETE를 수행할 때 DB는 다음과 같은 연산을 추가로 수행한다.

  • INSERT: 새로운 데이터에 대한 인덱스를 추가
  • DELETE: 데이터는 삭제 되나 인덱스는 사용 중지된 채 남아있음
  • UPDATE: 데이터를 수정하면 기존 인덱스는 사용 중지 함과 동시에 새로운 인덱스가 추가됨

때문에 사용하지 않는 인덱스는 바로 제거 해줘야 한다.

인덱스의 장/단점

테이블을 빠르게 조회할 수 있는 장점이 있다. 반면, 빠르게 조회하기 위해 인덱스를 정렬해야 하므로 추가적인 연산이 필요하다. 그 연산에 의해 인덱스의 크기가 커져 성능이 오히려 저하될 수 있다.

3.배운것

인덱스를 사용하면 좋은 경우

수정,삭제,생성을 하게 되면 인덱스의 추가 연산에 의해 쿼리 성능이 떨어질 수 있기 때문에 보다 상대적으로 조회를 훨씬 많이 할 경우에 사용하는편이 좋다.
또한 사용하지 않는 인덱스는 바로 삭제를 하는것이 좋다.

profile
백엔드

0개의 댓글

관련 채용 정보