이 블로그 내용은 real Mysql
내용을 정리한 내용입니다.
Mysql 아키텍쳐
참고) https://velog.io/@mooh2jj/MySQL-vs-PostgreSQL
스토리지 엔진 : MyISAM vs InnoDB(mysql5.5버전 이후)
참고) https://velog.io/@mooh2jj/Mysql-InnoDB-vs-MyISAM
DB 인덱스 자료구조: B-tree
참고#1) https://velog.io/@mooh2jj/DB-인덱스를-설정하면-왜-빨라지지
참고#2) https://velog.io/@mooh2jj/DB-인덱스는-왜-B-Tree-구조인가
index 설정 이후 조회속도 개선 확인
https://velog.io/@mooh2jj/MySQL-실행계획으로-성능-측정하기인덱스-설정-이후
pk(클러스터인덱스) vs unique(보조인덱스) vs 일반 index(보조인덱스) vs fk(constraint)
1) pk(클러스터 인덱스) = unique + not null
: pk는 테이블당 딱 1개, 레코드당 lock 걸게 해줌(레코드당 단위잠금)
2) unique = 유일성, 제약조건(Duplicate)에 더 가까운 키
3) fk 보조키 (테이블 constraint(제약조건) 기능)
: 다른 테이블의 기본키(PK) 필드를 참조하는 데이터의 무결성(Referential integrity)
을 확인하기 위해 사용되는 키, 인덱스가 생성되지만 제약조건을 위한 키
참고) https://12bme.tistory.com/150
RDBMS 릴레이션 키(후보키 vs 복합키 vs 대리키 vs 대체키)
0) 후보키(Candidate Key)
: 기본키(pk)가 될 수 있는 후보 속성들. 이중에서 기본키, 대체키 등이 나오는 것이다.
1) 복합키(Composite Key)
: 기본키(pk)로 쓰는 컬럼을 두개 이상으로 묶어서 정의한 키
2) 대리키(Surrogate Key)
: 인공키라고도 불림, UUID같은 것을 써 외부에 노출되도 되는 식별자로 이용, 참고) https://velog.io/@mooh2jj/DB-대체키에-대하여
3) 대체키(Alternate Key)
: 후보키 중에 기본키로 선정되지 않은 속성
트랜잭션 ACID
참고) https://velog.io/@mooh2jj/DB-Transaction과-ACID
커밋과 롤백 자동처리 : InnoDB unDo x reDo 로그로 백업!
DB 동시성 이슈
=> 해결은 schronized(동기화), Lock(잠금)!
Lock이란? 트랜잭션이 시작되면, 이용하고 있는 Row, Table은 트랜잭션이 끝날 때까지 점유하는 메카니즘!
트랜잭션의 데이터 일관성 및 무결성을 유지하고 동시성 제어에 필요!
but! 성능저하 심하면 Dead Lock이 걸릴 수 있다.
참고) https://velog.io/@mooh2jj/트랜잭션-동시성-제어-정리
스프링 AOP 기능 중 @Transactional
가 DB 트랜잭션 처리를 대신 해준다.
real Mysql 8.0 개정판
>1, 2권