Index 란?
인덱스는 왜 사용할까?
인덱스는 데이터를 찾는 프로세스 속도를 높이는 데 사용
모든 레코드를 조사하는건 너무 느리거든.
실제 DB 관련 작업을 할 때 Select문, 특히 조건 검색 Where절에서 속도 저하가 크게 발생하는데
이때, Index를 사용하면 큰 효과를 볼 수 있다.
데이터들이 정렬되어 있기때문에 큰 장점! (물론 어떤 인덱스를 사용하냐에 따라 다르긴 하다)
그럼 항상 좋을까? 🤔
레코드 내에 데이터값이 바뀌는 부분이라면 악영향!
Ex) INSERT, UPDATE, DELETE를 통해 데이터가 추가, 변경 된다면 INDEX 테이블 다시 정렬해야한다ㅜ
트랜잭션이 많은 환경이나 자주 변경되는 데이터베이스에서는 인덱스 이점 << 오버헤드일수도 있어.
SELECT * FROM Books WHERE Genre = 'Fiction';
Hash 인덱스 VS B-Tree 인덱스
여러 개 있는 상자에 상품의 특수 번호(해싱)에 따라 이러한 칸에 물건을 넣는다.
각 키(인덱싱되는 값)는 해시 함수를 사용하여 해시 테이블의 위치를 나타내는 해시 코드로 변환됩니다.
정렬되어 있다고 볼 수 없다. But, 정렬할 필요가 없으니 삽입/삭제가 빠를 수 있다.
다만 해싱된 데이터 값에 따라 저장될 버킷 위치를 정하기 때문에 빠른 속도로 검색 영역을 제한할 수 있다.
B-Tree 인덱스는 항상 정렬된 상태를 유지한다.
정렬된 상태를 항상 유지해야하기 때문에 삽입과 삭제시에 오버헤드 발생
이 경우는 정렬된 상태로 검색 범위를 제한시킬 수 있는게 맞다.
대부분 B-tree가 유리한데 그럼 Hash 인덱스는 왜 쓸까?
동등 검색으로 주로 구성된 키-값 저장소와 같은 시나리오 에서 효율적!
캐싱 시나리오 및 특정 유형의 NoSQL 에서 선호됨.
B-Tree 인덱스와 B+-Tree 인덱스의 차이는 무엇인가요?
기존 노드에 key 와 데이터를 담는 B-트리의 변형.
오직 리프 노드에만 key 와 data 를 저장하고, 나머지는 key 만 담는데, 이를 Linked list 로 연결
대용량 데이터를 효율적으로 관리할 수 있는 기능으로 인해 데이터베이스 시스템, 특히 인덱싱에 사용됩니다.
키(실제 데이터 레코드가 아님)만 포함하므로 더 많은 키를 저장할 수 있고 트리 높이가 줄어든다!
리프노드에 모든 데이터가 다 있어서 선형탐색으로 조회 가능! => B-tree 보다 빠르다.
인덱스 Scan 방식은 무엇이 있나요?
좋은 인덱스를 설계하기 위해 고려해야 하는 조건으로는 무엇이 있는지 아시나요?
인덱스 설계시 NULL값은 고려되야 할까요? 고려해야 한다면 어떤 이유인가요?
클러스터 인덱스와 논클러스터 인덱스는 어떤 차이가 있나요?
인덱스(Index Server) 샤딩 방식에 대해서 아시나요?