MySQL의 Using filesort와 Using temporary
·
DB
MySQL의 filesortMySQL 8.0 버전 기반으로 공식문서에는“filesort is the algorithm MySQL uses to sort results when it cannot use an index to retrieve the rows in sorted order.”MySQL 8.0 Reference Manual, 8.2.1.14 How MySQL Optimizes ORDER BY즉, 인덱스를 통해 정렬된 순서로 가져올 수 없을 때 MySQL이 사용하는 정렬 알고리즘을 의미합니다.“파일”이라는 단어 때문에 디스크에 쓰는 정렬이라고 오해하기 쉽지만, filesort는 ‘정렬 알고리즘’이며, 반드시 파일(디스크)를 쓰는 것은 아닙니다. MySQL의 정렬 방식MySQL이 조회한 데이터를 정..
[이음] 프로젝트에 쿼리의 실행계획을 분석하며 최적화 해보기
·
DB
게시글의 댓글 조회 기존의 쿼리는SELECT c.* from comments c WHERE c.post_id = :postId and c.is_deleted = false ORDER BY c.created_at asc 입니다. 댓글을 조회할 게시글의 id 값으로 한번 필터링한 후 삭제 여부가 false인 것들을 조회해 생성일자 오름차순으로 조회했습니다. explain으로 실행계획을 분석했을 때 개선할 수 있는 점을 발견했습니다.각각의 칼럼별로 간단히 결과를 하나하나 분석해보겠습니다.id select_type table partitions type possible_keys key key_len ref rows filtered Extra id: 쿼리 내부의 SELECT 단위 번호.select_t..
[DB] B+Tree 란? 그리고 자바 구현
·
DB
B+Tree데이터베이스의 인덱스에 자주 사용된다.B-Tree 계열의 Balanced Tree 종류 중 하나이다.B+Tree는 데이터베이스 인덱스와 파일 시스템 사용에 더 적합할 수 있도록 만들어졌다.구조이름처럼 트리 구조 - 바이너리 트리랑 개념적으로는 비슷함key 값으로 정렬되어 있다.자식 노드가 여러개다.각각의 노드가 메모리가 아닌 디스크에 저장되어 있다.데이터는 leaf노드에만 있다. 디스크에서도 메모리에서처럼 포인터 개념을 사용할 수 있다.각각의 노드에 sibling으로 가는 포인터가 존재한다.⇒ Range 쿼리하기에 좋다.→ 예시: SELECT * FROM table WHERE age >= 30 AND age B+ Tree 읽기key 3인 데이터 찾기binary search를 통해 자식 노드 ..
[DB] VACUUM vs GC ?! 데이터베이스 최적화의 첫 걸음
·
DB
DB를 직접 만들어보면서 내부적으로 optimizing을 어떻게 하는지 궁금했습니다.레코드를 삭제하고 삭제된 데이터는 어떤 흐름으로 처리되는지가 궁금했고VACUUM과 GC의 개념에 대해 알게되었습니다.VACUUM 은 파일을 재작성하거나 페이지를 재배치하여 내부의 쓸모없는 공간(삭제 처리된 레코드 등)을 물리적으로 회수(축소)하는 작업을 말한다. 반면, GC(가비지 콜렉션)은 DB 내에서 더 이상 참조되지 않는(예시: 과거 버전 트랜잭션) 레코드나 페이지를 논리적으로 해제하는 과정을 의미한다.(특히, 멀티 버전 방식 DB에서 오래된 버전은 아무도 안 쓰면 제거 가능이라는 식의 로직을 ‘가비지 컬렉션’이라 부를 때가 많다.)즉, 둘 다 ‘사용하지 않는 공간을 정리한다”는 취지는 같지만, 구체적 매커니즘과 시..