본문 바로가기
CS

[DB] 인덱스

by onejunu 2022. 6. 14.

질의응답 형식으로 면접하듯이 정리해봤습니다.

아무리 잘 아는 질문이라고 해도 막상 대답하려고 하면 어려운거 같습니다.

완벽히 아는게 아니라는걸 알려주는거 같기도합니다.

스스로 질문해보고 응답해보면 기억에 잘 남는거 같습니다.

 


SELECT의 성능은 어떻게 높일 수 있을 까요?

- 인덱스를 사용하면 SELECT의 속도를 높일 수 있습니다.

 

인덱스가 무엇인가요?

- RDB에서 테이블의 검색성능을 높여주는 방법중 하나입니다. 사전의 목차처럼 인덱스를 이용하여 원하는 데이터에 빠르게 접근할 수 있습니다.  특정 컬럼을 서치키로 설정하여 인덱스를 생성하면 그 값으로 정렬하여 별도 파일에 저장합니다. 인덱스는 보통 테이블의 10% 정도 저장공간을 차지하는 데 이유는 서치키와 포인터만 저장하기 때문입니다. 여러가지 자료구조로 인덱스를 구현할 수 있지만 대부분 B+트리를 이용하여 인덱스의 구조를 이룹니다. 

 

인덱스의 종류가 있나요?

- 인덱스는 클러스터형 인덱스와 보조인덱스가 있습니다. 

1) 클러스터형 인덱스 : 보통 PK를 기준으로 정렬하여 데이터를 저장합니다. 그렇게 되면 테이블 자체가 하나의 인덱스가 되고 이를 클러스터형 인덱스라고 합니다.

2) 보조 인덱스 : 별도 공간에 생성되는 인덱스를 의미합니다. PK 외에 원하는 컬럼에 대해서 인덱스를 생성할 수 있습니다. secondary index 라고도 합니다. 

 

인덱스를 많이 쓰면 되나요?

- 안됩니다. 검색성능은 향상될 수 있으나 추가 저장공간도 필요하고 변경작업이 많아지면 인덱스 재구성에 필요한 비용이 커집니다. 예를 들어,  어떤 테이블의 인덱스가 5개 있다고 한다면 데이터의 변경이 일어나는 경우 5개의 인덱스 자료구조의 재구성이 필요합니다.

 

 

어떤 컬럼에 인덱스를 써야하나요?

- 인덱스는 where 에서 자주 사용되고 수정빈도가 낮으며 카디널리티가 높은 컬럼을 선택하는 것이 좋습니다. 카디널리티가 높다는 것은 중복된 데이터가 적다는 뜻입니다.

 

성별에 인덱스를 생성해도 되나요?

- 아니요. 중복된 데이터가 많기 때문에 인덱스가 주는 이점이 적습니다.

 

데이터의 양과 관계가 있나요?

- 데이터가 많을 수록 인덱스로 인한 성능 향상을 더욱 크게 느낄 수 있습니다.

 

 

왜 해쉬테이블을 쓰지 않고 B+트리를 쓰나요?

- 해쉬테이블의 단건 검색 시간복잡도는 O(1) 입니다. 하지만 해쉬테이블은 정렬되어있지 않기 때문에 부등호를 사용하는 쿼리에 비효율적입니다. 그래서 정렬해서 사용하는 B+트리를 사용합니다. 

 

 

댓글