본문 바로가기

잡 메모/mysql

(3)
[Mysql] 효율적인 Index 사용 예제 효율적인 Index 사용법 Real My SQL을 읽다가 Index를 효율적으로 사용하는 방법을 정리하면 도움이 될거 같아 글을 남긴다. [MYSQL 환경] Server version: 8.0.29 Homebrew Storage engine = InnoDB; transaction isolation = Repeatable read 들어가기에 앞서 이 글에 사용될 테이블이다. 인덱싱은 각 테스트마다 만들어 줄것이다. 1. Index full scan Mysql은 쿼리에 첫번째 인덱싱된 열이 명시되어있지 않으며, 인덱싱된 열로 쿼리를 처리할 수 있을때, index full scan을 사용한다. 예를들어, 위 테이블에 name, age순으로 인덱싱이 걸려있고 아래와 같은 쿼리를 날린다고 가정을 해보자. sele..
[MYSQL] InnoDB 인덱스 락 테스트 Mysql의 InnoDB는 인덱스 기반의 레코드락 잠금을 지원한다. 즉, 변경할 행을 인덱스 기준으로 조회하고 조회된 행 모두에 잠금을 건 다음 변경을 진행하는데, 이 때문에, InnoDB에서는 인덱스를 잘 정의하는것이 성능과 직결된다. 이 게시글 에서는 InnoDB에서 업데이트를 진행시 잠기는 과정을 실습해볼것이다. [테스트 환경] Server version: 8.0.29 Homebrew Storage engine : InnoDB transaction isolation : REPEATABLE-READ 테스트 목적 : 스토리지엔진이 InnoDB인 테이블에 업데이트 쿼리시 잠기는 행 조사 - 테스트 해볼 테이블 정보 m_id와 m_area열은 인덱싱 되어있고, m_name은 인덱싱 되어 있지 않음을 기억하..
[MYSQL] SNAPSHOT - Phantom read 테스트 [MYSQL] InnoDB - Phantom read 테스트 mysql은 select 문으로 데이터를 읽어올때, 해당 트랜잭션 내에서 처음으로 읽어온 SNAPSHOT을 기반으로 데이터를 읽어온다. 이 특징 때문에, mysql는 Phantom read현상이 다른 DB와 다르게 발생한다고 한다. 이 포스팅에서는 Phantom read가 발생할 수 있는 세가지 환경 1. REPEATABLE-READ 2. READ-COMMITTED 에서 Phantom read가 발생하는지 확인하는것을 목적으로 한다. (READ-UNCOMMITED에서는 SNAPSHOT을 만들지 않는다고 하니 테스트 하지 않을것이다) [테스트 환경] Server version: 8.0.29 Homebrew Storage engine : InnoD..