본문 바로가기
면접 대비

CS 관련 면접 질문 정리 (DB)

by Mecodata 2023. 1. 30.

1. 인덱스(Index)
- 테이블에서 데이터의 검색 속도를 향상시키기 위한 DB의 자료구조
- SELECT를 통한 검색 속도가 크게 향상
- 데이터가 정렬된 상태로 값이 삽입됨
B+Tree 구조 => MySQL에서 노드 = 페이지 개념
- 데이터 변경 쿼리(INSERT, UPDATE, DELETE)가 잦을 경우 성능이 악화될 수 있음
=> 데이터 수정 시 오버플로우로 인한 페이지 분할로 여러 개의 페이지가 추가적으로 생성될 수 있기 때문 
- DB 크기의 약 10% 정도의 추가 공간을 필요로 함

B-Tree

출처 : https://ssup2.github.io/theory_analysis/B_Tree_B+_Tree

- 루트로부터 리프까지의 거리가 일정 형태의 트리이며 이진 트리의 확장 개념
- 루트 노드(최상위), 브랜치 노드(중간), 리프 노드(맨 밑)
- 하나의 노드에 여러 개의 Key:Data를 배치할 수 있음 (이진 트리와의 차이점)
- 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큼 (이진 트리와의 차이점)
- O(logN)의 속도

B+Tree

출처 : https://ssup2.github.io/theory_analysis/B_Tree_B+_Tree

- B-Tree의 확장 개념으로 리프 노드에만 Data가 저장될 수 있음 (Key는 모든 노드에 저장) => 트리의 높이가 낮아짐
- 리프 노드끼리 Linked List로 연결되어 있음
- 검색 시 모든 노드를 탐색하는 B-Tree와 다르게 리프 노드에서 한 번의 선형 탐색만 진행되어 B-Tree 보다 속도가 빠름
- 리프와 브렌치 노드 간의 키 중복이 허용됨
- O(logN)의 속도
 
2. 기본키/외래키

키(Key) 

- DB에서 조건을 만족하는 레코드를 찾거나 순서대로 정렬할 때 다른 레코드과 구별할 수 있는 유일한 기준이 되는 속성

기본키(Primary Key)

- 테이블에서 저장된 레코드를 식별할 수 있도록 하는 키
- 테이블 내에서 하나만 존재할 수 있음
- null, 중복 불가능 (NOT NULL, UNIQUE)
- auto_increment 설정 시(데이터 INSERT 시 자동으로 값 1 추가) 수정 불가

외래키(Foreign Key)

- 다른 테이블의 기본 키를 참조함으로써 두 테이블 간의 데이터를 연결시켜주는 키
- 테이블 내에서 여러 개가 존재할 수 있음
- 부모 테이블과 자식 테이블 간의 도메인이 서로 같은 상태에서 설정해줘야 함
- null, 중복 가능

제약조건(Constraint)

데이터의 무결성을 지키기 위해, 데이터를 입력받을 때 실행되는 검사 규칙
데이터의 무결성 = 데이터의 정확성과 일관성, 유효성을 유지하여 보증하는 것
1. NOT NULL = 지정한 컬럼이 NULL 데이터를 가질 수 없게 설정
2. UNIQUE = 지정한 컬럼에서 데이터 중복 입력 불가능하게 설정
3. DEFAULT = 데이터가 입력되지 않을 시 NULL 대신에 입력할 기본값 설정
4. PRIMARY KEY = 기본키 설정 (UNIQUE, NOT NULL 자동 적용)
5. FOREIGN KEY = 외래키 설정

외래키 제약조건(Foreign Key Constraint)

- CASCADE = 부모 테이블에서 데이터 수정 -> 자식 테이블에게도 수정된 데이터 반영
- SET NULL = 부모 테이블에서 데이터 수정 -> 자식 테이블에서 해당 데이터 NULL 처리
- NO ACTION = 부모 테이블에서 데이터 수정 -> 자식 테이블 그대로
- SET DEFAULT = 부모 테이블에서 데이터 수정 -> 자식 테이블에서 설정한 컬럼 기본값으로 데이터 변경
- RESTRICT = 부모 테이블에 데이터가 남아있으면 자식 테이블 데이터 수정/삭제 불가
 
3. 트랜잭션(Transaction)
- DB의 상태를 변경시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
- Commit = 트랜젝션의 처리 과정을 DB에 영구 저장하는 명령 (Ctrl+S)
- Rollback = 트랜젝션의 처리 과정에서 발생한 변경사항을 취소하고 이전의 상태로 되돌아가는 명령 (Ctrl+Z)

트랜잭션의 특징 - ACID

원자성(Automicity) = 트랜잭션은 DB에 모두 반영이 되거나 모두 반영되지 않아야
일관성(Consistency) = 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야
독립성(Isolation) = 어떤 하나의 트랜잭션도 다른 트랜잭션의 연산에 끼어들 수 없음
영구성(Durability) = 트랜잭션이 성공적으로 완료됐을 경우, 그 결과는 영구적으로 반영되어야 함
 
4. 조인(Join)
- DB 내에서 여러 테이블을 공통된 컬럼을 기준으로 연결하여 관련된 레코드를 조합하고 이를 하나의 결과 테이블로 표현하는 방법

INNER JOIN

- 조인하는 테이블의 ON 절의 조건이 일치하는 결과만 출력하는 조인

LEFT/RIGHT OUTER JOIN

- 테이블을 조인할 때 기준이 왼쪽/오른쪽이냐에 따라 기준 테이블의 모든 정보들을 출력하는 조인

UNION 

- 여러 개의 SELECT 문의 결과를 하나의 테이블이나 결과 집합으로 표현할 때 사용
- DISTINCT가 자동으로 포함되어 있음
- UNION을 하는 테이블들의 SELECT하는 컬럼의 숫자와 각 컬럼의 데이터 타입이 일치해야

UNION ALL

- UNION에서 DISTINCT를 제거하여 결과를 출력

댓글