데이터베이스는 조건문으로 검색할 때, 테이블 전체를 full scan으로 탐색한다. 이러한 탐색 방식은 데이터가 많아지면 비효율적인 방식이다.
인덱스는 데이터의 주소를 기억하고 관리하는 인덱스 파일(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