[TIL] 230217
✏️ Check Box
📌 정리
2월 프리온보딩 마지막 강의는 MySQL에서 효율성을 개선하기 위한 방법들을 소개하는 강의를 준비해주셨다. 이번 프리온보딩에서 가장 관심을 가지고 기다리던 주제였다.
Index
Index는 읽기 속도를 개선하기 위한 별도의 테이블을 생성하는 것이라고 생각하면 될 것 같다. 그렇다면 어떤 기준에 의해 Index를 설정하면 좋을까에 대해 강의에서 설명해주셨다.
- Cardinality
- Update Frequency
- Size
Cardinality
는 사전의미로 집합의 크기를 의미하는데, 쉽게 한 컬럼에서 나타날 수 있는 값 종류(Distinct)의 개수라고 생각하면 된다. 너무 적으면 한 식별자에 대한 크기가 크고, PK처럼 너무 많다면 모두 Read 해야하기에 효율이 떨어진다. 실습에선 날짜에 대한 Index를 만들어 예시를 보여주셨지만 사용하는 앱의 요구사항에 맞게 Index를 생성하면 될 것 같다.
Update Frequency
는 말 그대로 튜플의 수정이 빈번한가를 고려해야 한다는 것이다. 튜플이 빈번하게 수정되면 그에 따라 Index 테이블도 수정되어야 하며 이 작업에도 시간이 소요되기 때문에 Index 선정에 고려해주어야 한다.
Index 테이블은 Index key와 Pointer로 구성되어 있는데 만약 한 Index의 Size
가 커진다면, 크기가 고정된 한 페이지에 담길 수 있는 값들이 적어지기에 그만큼 여러 페이지를 훑어 높은 성능을 기대할 수 없다.
Normalization 및 Partitioning
중복을 제거하기 위한 작업으로 정규화
를 진행하지만, 많은 Join은 성능저하의 원인이 되기 때문에 현업에서는 레이턴시를 계산해서 반정규화하는 경우도 많다고 한다.
Partitioning
은 정수값과 같이 범위로 지정하는 Range, 특정 값들을 지정하는 List, 그리고 Hash 방식으로 나뉘어져 있다. 그리고 Sharding은 여러 DB에 분산 저장하는 방식이라면 Partitioning은 한 DB내에서 Partition을 구분해서 저장하는 방식이다.
이로써 4회차의 2월 프리온보딩이 끝났다. 이전 프리온보딩 주제보다는 더 기본적인 설명에 집중되어 있었고, 또한 Q&A가 거의 주를 이루었기에 궁금증이 많은 나같은 취준생들에게는 정말 좋은 강의였다.
한편 3월 프리온보딩 주제가 Layered Architecture 개선
으로 아주 흥미로운 주제이기에 다시 TIL 포스팅으로 찾아오려 한다.
Back to [TIL] 230215