-
[프리온보딩 백엔드 챌린지 2월] Week 2-2 ) Indexing, Normalization, Partitioning, Cache교육 2023. 2. 17. 23:04
https://www.wanted.co.kr/events/pre_challenge_be_4
<index>
: read 효율을 개선하는 도구
순차IO vs 랜덤IO
순차 IO가 훨씬 빠름
MySQL 특성상 현실적으로 어려움
(데이터를 순서대로 저장하지 않기 때문)
랜덤IO로 접근하되 접근하는 row의 갯수를 줄여야 함
primary key도 index
b-tree 구조 (분산이 잘 되어있음)
index를 효율적으로 사용하는 방법
cardinality : 얼마나 고유 값이 많냐 (show gloal variables like sql_mode) multi-index도 가능
LIKE : index 검색은 앞에서부터 하기 때문에 앞에는 고정시키고 뒤에는 바꿔야 사용 가능-> type-range로 index 테이블 안에서도 일부만 훑어서 봤다는 것 using index condition
BETWEEN, IN : 구간으로만 보는 것실행계획에서는 둘 다 range실질적으로 큰 차이는 없음
use index로 사용할 index 강제 지정 가능
비교해보고 적절한 index를 고르는 것이 중요함
ignore index로 무시하는 것도 가능
update frequency
index 걸어둔 컬럼이 수정되면 index를 관리하는 테이블도 수정이 필요함
잘 안바뀌면서 read에 자주 쓰이는 것으로 걸어줘야함
index size
innoDB - 16kb
index key size + pointer size
사이즈가 작아야 훑어보는 테이블의 수도 줄어듦
<nomaliazation>
데이터 정합성
중복 데이터
<partitioning>
대용량 테이블을 소규모 테이블로 나누어 저장하는 것하지만 사용자는 하나의 테이블로 read/write 한다고 생각함
range partition : 범위로 나누는 것. 날짜가 대표적. sql문에 partition 지정 가능
list partition : parameter의 값들을 리스트로 나열함. 파티션 키가 고정값인 경우
hash partition : range, list 로 균등하게 테이블을 나누기 어려울 때
shardingpartition은 하나의 DB에 여러 개로 나눈 것
sharding은 DB가 여러 개 있는 것
<cache>
MySQL 8.0부터 사라짐
'교육' 카테고리의 다른 글