1. Index
- 추가적인 작업들을 통해서 테이블에서 데이터의 조회 속도를 향상시켜줄 수 있는 자료구조
- ex)member_id가 각각의 포인터를 가지고 있다면 테이블 전체를 살피지말고 포인터만 살펴봐도 성능을 향상시킬 수 있다.
1)인덱스 사용 시 주의 사항
- 무조건 인덱스를 사용하는 것은 옳지 못한 생각이다.
- 조회 과정을 수행하지 않는 : Insert
- 조회 과정을 수행하지 않는 Insert의 경우 새로운 데이터가 삽입될 때 마다 Index를 최신화하도록 추가를 해줘야 한다. 추가적인 연산이 필요하므로 성능 저하를 일으킬 수 있다.
- 조회 과정 수행하는 : Select, Delete, Update
- Select, Delete, Update는 조회를 시작으로 한다. 조회에 대한 성능은 향상 된다.
- Select : 조회만 함으로 추가 연산이 없다.
- Delete : 삭제하는 데이터의 Index를 사용하지 않도록 하는 작업 후 추가적으로 진행
- Update : 기존 Index를 사용하지 않도록 하는 작업 후 갱신된 Index를 추가
- 즉 Select는 추가 연산이 없어 성능 향상을 도모할 수 있지만, Delete와 Update의 경우 추가 연산으로 인해서 성능이 저하될 수 있다. Delete, Insert, Update가 많이 수행된다면 Index가 오히려 데이터 보다 크기가 커질 수 있다.
- Index를 사용하면 좋은 경우
- 크기가 충분히 큰 테이블
- Insert, Delete, Update가 자주 발생하지 않는 컬럼
- Join, where Order by를 자주 사용하는 컬럼
- 한 컬럼이 가지고 있는 데이터의 중복성이 낮은 컬럼
2)Indext 자료 구조
- Hash Table
- (key, value)로 데이터를 저장하고, key값으로 고유한 Index를 생성하여 값을 O(1) 속도로 가져오는 자료구조
- 이진트리와 유사하지만 자식 노드가 2개 이상일 수 있다. 하지만 Insert, Delete, Update 연산을 통해 점차 균영이 깨지고 성능이 악화되어, 재구성하는 작업이 필요할 수 있다.
- B+Tree
- B-Tree와 다르게 브랜치 노드에 key만 두고, data는 담지 않는다. 오직 리프 노드에만 key와 data를 저장한다. 리프 노드들은 Linked List로 연결
- 장점은 하나의 노드에 더 많은 Key 값을 담을 수 있기 때문에 트리의 높이가 낮아진다.(더 빠르게 탐색 가능)
2. ElasticSearch
- 일반적인 검색 엔진은 웹에서 정보를 수집하여 검색 결과를 제공한다. DB의 비정형 데이터를 색인하고 검색하는 것은 불가능 하다.
- 엘라스틱 서치는 비정형 데이터를 색인하고 검색하는 것이 가능하다.
- 또한 장점중의 하나인 역색인 구조를 사용함으로써 빠른 검색이 가능하다.
- 역색인 : 키워드를 통해 문서를 찾는 방식
3. 참조
1) Index 이론과 스프링에 적용하기 : https://dingdingmin-back-end-developer.tistory.com/entry/Spring-Data-JPA-6-Index-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0