MySQL3 커버링 인덱스를 이용한 최적화 이번에 사이드 프로젝트를 진행하며 쿼리 실행계획을 보며 쿼리 최적화를 진행하였다. 우선 테이블을 보자.create table account_book( id bigint auto_increment primary key, title varchar(255) not null, type varchar(255) not null, amount int not null, created_at datetime default CURRENT_TIMESTAMP null, updated_at d.. 2025. 4. 29. MySQL의 인덱스 (1) Real MySQL의 인덱스를 읽으며 정리를 해볼려고 한다. MySQL8.x 버전의 InnoDB를 기준으로 작성한다.디스크 읽기 방식인덱스는 MySQL이 데이터를 더 효율적으로 검색하도록 도와주는 구조로, 특히 데이터가 많을수록 그 효과가 두드러진다. MySql은 B+Tree 기반 인덱스를 사용하는데, 이 구조의 탐색 과정에서 디스크 접근 방식이 성능에 큰 영향을 주게된다. 그래서 인덱스에 대해 알아보기 전 디스크 접근 방식인 랜덤I/O와 순차I/O에 대해 간단히 알아보자.랜덤 I/O (Random I/O)랜덤 I/O는 디스크의 서로 떨어진 위치에서 데이터를 읽거나 쓸 때 발생하는 입출력 방식. 책에서 중간중간 필요한 페이지만 펴서 읽는 것처럼, 디스크 헤드가 여러 위치로 이동해야 해서 속도가 느림.디스.. 2025. 4. 11. InnoDB MVCC Real MySQL1을 읽어보다 재밌는 내용이 있어 포스팅해볼려고 한다. READ COMMITTED 이상의 격리 수준에서는 커밋되지 않은 데이터를 읽을 수 없다. 예를 들어, 트랜잭션 A가 pk = 1인 레코드를 UPDATE 중일 때, 트랜잭션 B가 같은 레코드를 조회하려고 하면 트랜잭션 A가 커밋되기 전까지는 해당 변경 내용을 볼 수 없다.이때 트랜잭션 B는 트랜잭션 A가 변경하기 전의, 즉 과거 버전의 데이터를 읽게 되는데, 이것이 바로 MVCC(Multi-Version Concurrency Control) 에 의해 제공되는 기능이다. MVCC에 대해 자세히 알아보기 전에 간단한 개념 정리를 해보자.ACIDACID는 데이터의 일관성과 신뢰성을 보장하기 위한 4가지 성질이다.항목설명Atomicity (.. 2025. 3. 30. 이전 1 다음