티스토리 뷰
- 데이터베이스
파일 시스템의 문제를 해결하기 위해 고안됨.
데이터의 독립성, 무결성, 보안성, 일관성, 중복 최소화
성능은 디스크의 I/O에 좌우.
- 인덱스
테이블의 검색 속도를 향상시키기 위해 별도의 메모리 공간에 칼럼의 값과 주소를 키-값 형태로 정렬되어 저장.
탐색은 빠르지만 추가, 삭제, 수정은 느림
- B Tree Index: 일반적으로 사용. 칼럼의 값을 변형하지 않고 인덱싱
- B-Tree: 균형 트리. 각 노드마다 key와 data를 가짐.
- B+Tree: 리프 노드에만 key와 data를 가지고 리프 노드는 linkedlist로 연결
- Hash Index: 칼럼의 값을 해시 함수로 계산해서 인덱싱. 동등 연산에만 적합
* 카디널리티와 선택도가 높을 수록 인덱스 설정에 적합.
카디널리티: 중복되지 않는 값의 개수
선택도: 특정한 값을 얼마나 잘 골라낼 수 있는지에 대한 지표
선택도 = 카디널리티 / 레코드 수)
- 기본 인덱스 vs 보조 인덱스
기본 인덱스: 기본 키로 인덱스 설정. 일반적으로 물리적 장소가 인접한 레코드끼리 묶어서 저장하는 clustered index.
보조 인덱스: 기본 인덱스가 아닌 인덱스. 테이블 당 여러개 생성 가능
- 키
- 슈퍼키: 유일성 만족, 최소성 만족x
- 후보키: 유일성, 최소성 모두 만족
- 기본키: 후보키 중 선택된 키
- 대체키: 후보키 중 기본키가 아닌 키
- 외래키(foreign key): 다른 테이블의 기본키를 참조하는 키
- 유일성: 테이블의 튜플들을 유일하게 식별
- 최소성: 유일하게 식별할 수 있는 최소한의 속성
- DDL vs DML vs DCL
DDL: 데이터베이스의 구조를 정의, 수정, 삭제 (alter, create, drop)
DML: 데이터베이스 테이블 내의 검색, 삽입, 갱신, 삭제 (select, insert, update, delete)
DCL: 데이터의 무결성 유지, 보호, 관리 (commit, rollback, grant, revoke)
- 트리거
특정 테이블에 대한 이벤트에 반응하여 자동으로 동작하는 프로그램
- 정규화 (도부이결다조)
하나의 릴레이션에 하나의 의미만 존재하도록 테이블을 분해하는 것.
이상 현상 제거.
1. 도메인이 원자값만을 가짐
2. 부분 함수 종속 제거
3. 이행 함수 종속 제거
BCNF: 모든 결정자가 후보키여야 함
4. 다치 종속 제거
5. 조인 종속 제거
- 이상 현상
삽입 이상: 삽입하기 위한 자료가 부족해 null값을 삽입하거나 삽입이 되지 않음
삭제 이상: 튜플 전체를 삭제하여 원하지 않은(필요한) 정보까지 삭제됨
갱신 이상: 일부의 튜플만 갱신되어 일관성이 보장되지 않음
- 반정규화
정규화한 테이블들끼리 조인 연산이 많아져서 성능이 떨어질 경우 테이블을 통합하는 것.
- RDBMS vs NoSQL
- RDBMS: 스카마 있음. 모든 데이터를 2차원 테이블로 표현.
구조가 명확하고 변경되지 않는 경우 사용. - NoSQL: 대량의 분산된 데이터를 저장하고 조회. 스키마가 없음.
구조를 정확히 알 수 없고 변경/확장될 수 있는 경우 사용.
CAP(일관성, 가용성, 네트워크 분할 허용성) 중 두개만 만족시킴
키컬도그(key-value, column, document, graph model)
- 트랜잭션
데이터베이스에서 작업의 완전성을 보장하기 위한 작업의 수행 단위. ACID 만족.
- 원자성(Atomicity): 트랜잭션이 완전히 수행되거나 수행되지 않아야 함
- 일관성(Consistency): 트랜잭션이 완료된 후에도 트랜잭션이 일어나기 전과 동일하게 데이터의 일관성 보장
- 독립성(Isolation): 트랜잭션끼리 영향을 미치지 않고 독립적으로 수행
- 영속성((Durability): 트랜잭션 수행 후 데이터베이스에 영구적으로 반영
- 옵티마이저
SQL을 빠르고 효율적으로 수행할 최적의 경로를 생성해주는 DBMS 핵심 엔진.
- GROUP BY
특정 컬럼을 기준으로 그룹을 지어 연산결과를 보여줌
- DELETE vs TRUNCATE vs DROP
DELETE: 데이터를 지움
TRUNCATE: 테이블의 데이터 모두를 지움. 테이블 구조는 남아있음
DROP: 테이블 구조를 완전히 지움
- HAVING vs WHERE
HAVING: GROUP BY를 사용할 때, 그룹에 대한 조건
WHERE: 개별 행에 대한 조건 (먼저 실행됨)
- JOIN -> ON vs WHERE
ON: JOIN 하기 전 조건에 맞는 행을 찾음
WHERE: JOIN 한 후에 조건에 맞는 행을 찾음
https://github.com/JaeYeopHan/Interview_Question_for_Beginner
'etc > 면접' 카테고리의 다른 글
[SK플래닛] 2023 채용연계형 인턴 합격 후기 (Engineering-Programming) (0) | 2023.06.11 |
---|---|
면접 준비 - 안드로이드 (0) | 2023.03.12 |
면접 준비 - 스프링, 기타 (0) | 2023.03.11 |
면접 준비 - 네트워크 (0) | 2023.03.11 |
면접 준비 - 운영체제 (0) | 2023.03.10 |