각 row를 unique하게 구분할 때 사용하는 column
유일성
최소성
Primary key로 연결된 다른 table의 column
join은 두 테이블을 합칠 때 사용
테이블 A와 B가 있을 때,
A의 모든 내용에 대하여 합침
A⋂B의 내용에 대하여 합침
id | title | y_id |
---|---|---|
1 | 데이터베이스 완전정복 | 2 |
2 | 볼리비아 광산 탐방기 | 4 |
3 | 침vs펄 토론 | 3 |
4 | 운영체제 완전 정복 | 2 |
5 | 충격실화 대한민국이 해냈다 | Null |
id | name | 채널 설명 |
---|---|---|
1 | 쯔양 | 먹방 |
2 | 개발남노씨 | 개발 |
3 | 침착맨 | 예능 |
4 | 빠니보틀 | 여행 |
id | title | y_id | name | 채널 설명 |
---|---|---|---|---|
1 | 데이터베이스 완전정복 | 2 | 개발남노씨 | 개발 |
2 | 볼리비아 광산 탐방기 | 4 | 빠니보틀 | 여행 |
3 | 침vs펄 토론 | 3 | 침착맨 | 예능 |
4 | 운영체제 완전 정복 | 2 | 개발남노씨 | 개발 |
5 | 충격실화 대한민국이 해냈다 | Null | Null | Null |
id | title | y_id | name | 채널 설명 |
---|---|---|---|---|
1 | 데이터베이스 완전정복 | 2 | 개발남노씨 | 개발 |
2 | 볼리비아 광산 탐방기 | 4 | 빠니보틀 | 여행 |
3 | 침vs펄 토론 | 3 | 침착맨 | 예능 |
4 | 운영체제 완전 정복 | 2 | 개발남노씨 | 개발 |
RDB = Relational Data Base
Data Update Frequency ⬆️: RDB
Data Update Frequency ⬇️: No SQL
데이터 구조 ✅: RDB
데이터 구조 ❌: No SQL
데이터 양 ⬆️: No SQL
데이터 양 ⬇️: RDB
출처 : https://www.slideshare.net/teoliphant/scaling-pydata-up-and-out
데이터베이스 작업의 최소 단위, 장애 발생 시 복구의 효율성을 높이기 위함 = [데이터베이스의 무결성]을 유지하기 위함
은행에서의 Transaction을 입금과 출금 따로 분리하면
송금을 했음에도 불구하고 상대방이 돈을 받지 못 하는 오류
가 발생할 수 있음.
따라서 은행에서는 [입출금]을 하나의 최소단위(Transaction)로 구분함.
데이터베이스의 무결성
을 위해
위 그림은 ACID
의 Isolation 원칙을 무시하고 있다. 따라서 이를 해결하기 위해 동시성 제어
가 필요하다.
[transaction 3]에서 'A-100'연산을 했지만 [transaction 2]에서 연산을 다시 하면서 무효화 됐다.
이를 해결하기 위해 [transaction 3]에서 lock을 걸어놓고 작업을 한다. lock이 걸려있는 동안 [transaction 2]는 대기를 해야하고 unlock 상태로 전환되고 나서 작업을 한다.
Table의 [검색 성능 향상]을 위하여
기준 | 적합성 |
---|---|
카디널리티(Cardinality) | 높을수록 적합 (데이터 중복이 적을수록 적합) |
선택도(Selectivity) | 낮을수록 적합 |
조회 활용도 | 높을수록 적합 (where 절에서 많이 사용되면 적합) |
수정 빈도 | 낮을수록 적합 |
카디널리티 = 집합의 길이
카디널리티가 높다는 뜻은 집합이 길다는 뜻이고 이는 다양한 검색이 가능하다는 뜻이다.
선택도가 낮아야 특정 레코드를 찾는데 효과를 볼 수 있음.
전체 데이터에서 1개밖에 없는 데이터를 찾을 때 풀스캔을 하는 손해와 전체 데이터의 70%의 데이터를 찾을 때 풀스캔을 하는 손해는 전자가 더욱 큼
당연히 많이 쓰이는 column일수록 index를 걸어두면 요긴하게 사용 가능
[Index 단점 #2]와 같이 데이터 업데이트가 많이 일어날수록 과부하가 발생하므로 수정 빈도는 낮아야 한다.
데이터를 검색을 할 때 hash table의 시간복잡도는 O(1)이고 b+tree는 O(logn)으로 더 느린데 왜 index는 hash table이 아니라 b+tree로 구현되나요?
하나의 값을 찾을 때는 hash table이지만 여러 개의 값을 찾을 때는 b+tree
가 유리하기 때문이다.
인터뷰 질문 목록과 설명은 패스트캠퍼스 강의를 기반으로 제작하였습니다.