[SPRING #14 JPA] Indexing

eunseo·2021년 10월 31일
0

SPRING

목록 보기
14/14

데이터베이스는 조건문으로 검색할 때, 테이블 전체를 full scan으로 탐색한다. 이러한 탐색 방식은 데이터가 많아지면 비효율적인 방식이다.

SQL의 간단한 예시

  • SELECT first_name FROM people WHERE last_name = 'Smith'; 라는 SQL문을 실행한다고 가정해 보자.
  • Index가 설정되어 있지 않는다면 Database는 Full table scan이라고 불리는 scan을 진행한다.

1. 순차접근(Full Table Scan)

  • row의 값을 순차적으로 scan하며 값을 비교한다.
  • Full table scan은 가장 느린 scanning 방법이다.
  • 속도도 느리고 자원도 많이 사용하는 좋지 않은 방법이다.
  • 이러한 문제를 해결하기 위해 Database에서 Index기능을 제공한다.

2) 인덱스 (Index)

인덱스는 데이터의 주소를 기억하고 관리하는 인덱스 파일(Index File)과 실제 데이터를 기억하는 데이터 파일(Data File)로 구성되어 있다. 데이터를 검색 시, 먼저 인덱스 파일에서 찾고자하는 데이터가 저장된 주소를 찾고 그 뒤 찾은 주소값을 통해 데이터 파일에서 데이터를 찾는다. 이 인덱스 기법은 수많은 데이터 중에서 원하는 자료를 빠르게 검색할 수 있도록 해준다.

Index는 관련된 Table과 별도로 저장되며 Index로 설정한 컬럼값이 변경되거나 추가되면 Index도 업데이트가 동시에 된다?
innodb

b+tree

참고로 hibernate, mysql 등은 기본적으로 기본키를 활용한 인덱스 테이블을 자동으로 만든다.

JPA Indexing 설정 방법

그러면 테이블 생성할 때, name 컬럼으로 인덱스 테이블이 새로 추가된 것을 확인할 수 있다.

-- 인덱스 조회

-- 인덱스 타는지 확인

ex ) 회원수 50만명일 때 이름에 대한 인덱스를 사용했을 때와 사용하지 않았을 때, 조회 시 걸린 속도 비교이다.

출처: https://dodo000.tistory.com/22
https://nesoy.github.io/articles/2017-07/DBIndex
https://www.baeldung.com/jpa-indexes
https://wakestand.tistory.com/519

profile
backend developer

0개의 댓글