본문 바로가기

MySQL4

ORDER BY 처리 (Using filesort) Real MySQL1권을 보며 정리한 내용이다. 책을 읽고 그냥 넘기다 보니 머리속에 잘 안들어와 글로 작성하며 정리해보려 한다. 정렬을 처리하는 방법은 인덱스를 이용하는 방법과 쿼리가 실행될 때 "Filesort"라는 별도의 처리를 이용하는 방법으로 나눌 수 있다. 장점단점인덱스 이용1. INSERT, UPDATE, DELETE 쿼리가 실행될 때 이미 인덱스가 정려돼 있어서 순서대로 읽기만 하면 되므로 매우 빠르다.1. INSERT, UPDATE, DELETE 작업 시 부가적인 인덱스 추가/삭제 작업이 필요하므로 느리다. 2. 인덱스 때문에 디스크 공간이 더 많이 필요하다.3. 인덱스의 개수가 늘어날수록 InnoDB의 버퍼 풀을 위한 메모리가 많이 필요하다.Filesort 이용1. 인덱스를 생성하지 않.. 2025. 7. 7.
커버링 인덱스를 이용한 최적화 이번에 사이드 프로젝트를 진행하며 쿼리 실행계획을 보며 쿼리 최적화를 진행하였다. 우선 테이블을 보자.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.