OneDev

[기술면접] 데이터베이스 인덱스(Index) 에 대해 설명해보세요 본문

DB\SQL

[기술면접] 데이터베이스 인덱스(Index) 에 대해 설명해보세요

one_dev 2024. 4. 10. 21:49
Q.인덱스가 무엇인가요?
  • 데이터베이스에서 검색 속도를 향상하기 위해 사용하는 데이터베이스 객체입니다.
  • 데이터의 위치 정보를 가지고 있고, 정렬된 상태를 유지합니다.
  • 내부적으로 B트리/ B+트리 / 해시 테이블 등의 구조로 구성되어있습니다.
  • 하나 이상의 컬럼에 대해 생성 가능합니다

 

Q.인덱스 사용의 장점에 대해 설명해주실래요?
  • 테이블의 검색 속도가 향상됩니다
  • 이는 시스템 부하 감소로 이어집니다.

 

Q.인덱스 사용의 단점에 대해 설명해주실래요?
  • 인덱스를 저장하기 자원(물리적 공간)이 더 소모됩니다
  • DML 사용시 성능이 감소할 수 있습니다 (UPDATE, INSERT, DELETE)
  • UPDATE, DELETE 등이 빈번하게 일어나는 컬럼에 인덱스를 생성하게 되면 인덱스의 크기가 커져서 성능히 저하될 수 있습니다.
  • -> (이유는?) UPDATE와 DELETE 를 사용하면 기존의 인덱스를 삭제하는 것이 아닌, "사용하지 않음" 처리 하기 때문에 인덱스의 크기가 점점 커지게 됩니다
  • + 데이터를 추가할 경우 정렬 상태를 유지하기 위한 추가적인 비용이 소모되게 됩니다

 

Q.그럼 인덱스는 언제 사용하는게 좋을까요?
  • 테이블의 행의 수가 많을 떄(테이블의 규모가 클 때)
  • WHERE / JOIN / ORDER BY 문에 해당 컬럼이 많이 사용될 때
  • INSERT, UPDATE, DELETE (삽입, 수정, 삭제) 가 자주 발생하지 않는 컬럼에 대해
  • JOIN에 자주 사용되는 컬럼이나 NULL 을 포함하는 컬럼이 많은 경우
  • 검색 결과가 전체 데이터의 2 ~ 4% 정도일 떄

 

Q.그럼 인덱스를 사용하지 않는 것이 더 나은 경우에는 어떤 것들이 있을까요?
  • 테이블의 행의 수가 적을 때
  • INSERT, UPDATE, DELETE 가 자주 발생하는 컬럼인 경우
  • 검색 결과가 전체 데이터의 10 ~ 15% 정도일 때
  • WHERE 문에 해당 컬럼이 자주 사용되지 않을 때

 

Q.클러스터형 인덱스와 넌클러스터형 인덱스에 대해 설명해주세요
    [클러스터 인덱스]
  • 테이블당 1개만 허용됩니다
  • 기본 키 설정시 자동으로 만들어집니다
  • 데이터 입력,수정,삭제시 항상 정렬된 상태를 유지합니다
  • 범위 검색에 유리합니다
  • 데이터 삽입 시 정렬 상태를 유지해야 하기 때문에 추가적인 비용이 발생합니다
    [넌클러스터 인덱스]
  • 테이블당 여러개 (약 240개) 생성 가능합니다
  • 레코드의 원본은 정렬되지 않고, 별도의 장소에 생성된 인덱스 페이지만 정렬됩니다
  • 클러스터형 인덱스보다 검색 속도는 더 느리지만, 입력, 수정, 삭제 작업은 더 빠릅니다
  • 인덱스를 저장할 추가적인 공간이 필요합니다

 

 

 

 


※ 지속적으로 내용 추가 & 수정 계획입니다. 

오류 or 추가되었으면 하는 사항 댓글로 달아주시면 작성에 큰 도움이 됩니다.

 

------- [ 추가 예정 질문] -----

Q. B트리 / B+ 트리 / 해시 테이블 이(가) 내부적으로 어떻게 생겼는지 설명해보실래요?

'DB\SQL' 카테고리의 다른 글

[기술면접] ACID 에 대해 설명해주세요  (0) 2024.04.11
Comments