티스토리 뷰
인덱스와 관련해서 받은 면접 질문을 정리한 포스팅입니다.
제가 경험한 면접 질문에 대한 대답을 정리하다보니 저만의 대답 방식으로 인해 간결할 수 있는 점 양해바랍니다.
인덱스는 보통 왜 사용하나요?
인덱스는 데이터베이스의 성능 향상 수단으로 사용되는 가장 일반적인 방법입니다.
응답 시간이 늦은 SQL이 발견되면 우선 인덱스로 해결할 수 없는지를 검사하는 것이 튜닝의 제 1선택입니다.
인덱스의 장점으로는 SQL 문을 변경하지 않아도 성능을 개선할 수 있다는 점과 테이블의 데이터에 영향을 주지 않는다는 점이 있습니다.
보통 INDEX를 어느 컬럼에 걸어주나요? (⭐)
보통 Cardinality(카니널러티)가 높은 열에 만듭니다.
Cardinality란 값의 분산도를 나타내는 단어로, 특정 열에 대해 많은 종류의 값을 가지고 있다면, Cardinality가 높다는 의미입니다.
그리고 크기가 큰 테이블에 만듭니다.
제 경험으로 미루어 봤을 때 row 수가 약 80만 건 정도가 되면 인덱스가 없는 조회는 성능이 떨어졌습니다.
테이블의 크기가 크다의 기준은 무엇인가요?
지금 다니고 있는 회사를 기준으로 답변드려보겠습니다.
일평균 5000건 이상씩 생성되는 주문 테이블을 크다고 판단하고 인덱스를 걸어주었습니다.
INDEX가 Hash가 아닌 B-tree를 사용하는 이유 (⭐⭐)
SELECT 질의의 조건에는 부등호(<>) 연산도 포함이 됩니다.
동등 연산에 특화된 해쉬는 데이터베이스의 자료구조로 적합하지 않습니다.
다중 컬럼 인덱스가 안 걸리는 케이스 (⭐)
복수의 키에 대해서 order by를 사용한 경우
연속하지 않은 컬럼에 대해 order by를 실행한 경우
desc와 asc를 혼합하여 사용한 경우
group by와 order by의 컬럼이 다른 경우
order by 절에 다른 표현을 사용한 경우
distinct vs group by (⭐)
Distinct는 중복된 결과를 제거하여 유일한 결과만 반환합니다.
반면에 group by는 데이터를 그룹화하고 그룹화 된 결과를 반환합니다.
일반적으로 집계 함수와 함께 사용되어 데이터를 합계, 평균, 최대값 또는 최소값 등으로 계산합니다.
'면접 질문' 카테고리의 다른 글
백엔드 면접 질문 - Blocking I/O vs Non-Blocking I/O (0) | 2023.09.17 |
---|---|
백엔드 면접 질문 - 카프카 (1) | 2023.08.19 |
ChatGPT에게 물어본 백엔드 면접 예상 질문과 답변 (0) | 2023.02.23 |
기본형(Primitive type)과 참조형(Reference Type) (0) | 2020.10.06 |
Vector, ArrayList, LinkedList (0) | 2020.10.06 |
- Total
- Today
- Yesterday
- Algorithm
- 정규표현식
- C++
- 코테
- MSA
- node.js
- programmers
- kkoon9
- BAEKJOON
- 디자인 패턴
- 클린 아키텍처
- 프로그래머스
- 알고리즘
- Effective Java
- Olympiad
- Spring Boot
- 디자인패턴
- BOJ
- AWS
- 백준
- Java
- 객체지향
- 테라폼
- kotest
- 이팩티브 자바
- JPA
- 이펙티브 자바
- Kotlin
- 클린 코드
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |