데이터베이스란
DB를 쓰는 이유
데이터의 종속성이란 (=파일시스템 문제점)
데이터의 중복성이란 (=파일시스템 문제점)
DB 특징을 설명
DB의 성능은 어떻게 측정하는지? DB 성능지표가 무엇인지?
I/O란?
랜덤 I/O와 순차 I/O
IO관련 알아둘것
랜덤 I/O를 해결하는 방법
인덱스란? (기존에 썼던거 이거로 바꾸기)
인덱스 생성 쿼리 (참고)
인덱스 작동 과정 설명
인덱스의 장단점
인덱스를 사용하면 좋은 경우는 무엇이 있는지
인덱스 자료구조 종류
B+tree 인덱스 설명 (기존에 썼던걸 이거로 바꾸자-이게 더 깔끔)
Hash 인덱스 설명 (기존에 썼던거에 추가)
DB에서 왜 index를 생성하는데 B+tree를 사용하는지? (중요)
Hash 인덱스보다 B+tree를 사용하는 이유
B+tree가 B-tree보다 항상 좋다고 할 수 있는가?
Where절에서 인덱스 적용하면 효율적인 이유
Order By절에서 인덱스를 적용하면 효율적인 이유
옵티마이저란
쿼리 작동 과정 설명 (매우중요)
규칙 기반 옵티마이저 설명 (RBO 설명 - Ranking)
비용 기반 옵티마이저 설명 (CBO 설명 - Cost)
통계정보란
정규화가 뭔가요? <중요중요>
정규화의 장단점
단점에서 미루어보았을 때, 어떤 상황에서 정규화를 해야되나? 단점에 대한 대응책은?
Anomaly가 뭔가요? (이상이란?)
Anomaly 종류 각각 설명 (삽삭갱)
함수적 종속성이란
1NF
2NF
3NF
그 이후 정규화들
반정규화란 (De-normalization)
테이블 반정규화 ~> sqld내용들로 추가
컬럼 반정규화
관계 반정규화
DB의 트랜잭션의 의미가 뭔지 아는지, 그리고 언제 주로 사용하는지 아시나요? p371<중요>
트랜잭션의 특성을 설명해주세요. p371
COMMIT과 ROLLBACK을 설명해보세요. p436 예제 이해
Auto Commit 기능이 뭔지 아나요?
repeatable read isolation이 뭔가
트랜잭션의 상태 설명
Partially Committed와 Committed 상태의 차이점
교착상태 예 (이해용)
교착상태 발생 조건 (Dead lock 발생조건) <상,점,비,순 으로>
상호 배제 (Mutual exclusion) - 예방
점유 대기 (Hold and wait) - 예방
비선점 (No preempthon) - 예방
순환 대기 (Circular wait) - 예방
교착상태 회피
교착상태 검출과 회복
Lock 이란
Shared lock (s)과 Exclusive lock (x) 설명
lock을 거는 규칙 (참고 이해용)
1) 여러 transaction이 동시에 한 row에 S lock을 걸 수 있다. 즉 여러 transaction이 동시에 한 row를 읽을 수 있다.
2) 문제는 s lock 상태에서 다른 transaction이 x lock을 시도할 수 없다는 것이다. 즉 update, delete 등을 할 수 없다.
3) 또한 x lock이 걸려있는 row에는 다른 transaction이 s lock, x lock 을 걸 수 없다. 다른 transaction이 수정하거나 삭제하고 있는 row는 읽기, 수정, 삭제가 모두 불가능하다.
정리하자면 S lock의 경우 같은 row에 접근이 가능하지만 X lock이 걸린 row는 접근 불가능하며, S lock이 걸린 row에 X lock을 수행할 수 없다.
참고링크 1 : https://nesoy.github.io/articles/2019-05/Database-Transaction-isolation
트랜잭션의 격리수준(isolation)이란 <중요>
부정합 문제란
Read UnCommitted 설명
Dirty Read 문제란
Read Committed 설명 (그림으로 이해하면 쉬움)
Non-Reapeatable Read 문제란
Reapeatable Read 설명
Phantom Read 문제란
Serializable 설명
Undo 로그 설명 (언두 로그)
NoSQL에 대해 설명해보세요 ( https://youtu.be/xkCeakMCKHc )
SQL과 NoSQL의 차이에 대해 설명해보세요
스키마가 있냐 없냐 (스키마란 데이터를 저장하는 규칙)
-> RDB는 정해진 스키마에 따라 테이블에 저장됩니다.
-> NoSQL은 정해진 스키마가 없습니다.
관계가 있냐 없냐
-> RDB는 A스키마에서 B스키마를 참조할 수 있는 관계가 있음
-> NoSQL은 관계가 없이, 모두 저장함 (참조관계 상관없이)
그래서!! <핵심 여기만 발표>
-> RDB는 스키마가 명확하게 정의되어 데이터 무결성을 보장하지만 덜 유연
복잡한 관계 때문에 join을 많이 사용하고, 검색 속도 느려짐
-> No는 스키마가 없어서 유연하고, 관계가 없어 검색 속도가 빠름
데이터가 여러 컬렉션에 중복될 수 있어, 삽/삭/갱 시 모든 컬렉션 수정
.