Database

Database/MySQL

MySQL Full Text (with QueryDsl)

전문 검색 인덱스 문서의 내용 전체를 인덱스화해서 특정 키워드가 포함된 문서를 검색하는 전문(Full Text)검색에는 InnoDB, MyISAM 스토리지 엔진에서 제공하는 일반적인 용도의 B-Tree 인덱스를 사용할 수 없다. 문서 전체에 대한 분석과 검색을 위한 인덱싱 알고리즘을 전문 검색 인덱스라고 하는데, 전문 검색 인덱스는 일반화된 기능의 명칭이지 전문 검색 알고리즘의 이름을 지칭하는 것은 아니다. 전문 검색 인덱스 알고리즘 전문 검색 인덱스는 문서의 키워드를 인덱싱하는 기법에 따라 크게 단어의 어근 분석과 n-gram 분석 알고리즘으로 구분할 수 있다. 예전에는 구분자도 하나의 알고리즘으로 평가됐지만 어근 분석과 n-gram 분석 알고리즘에 포함되었다. 어근 분석 알고리즘 MySQL 서버의 전..

Database/MySQL

InnoDB가 Phantom Read를 피하는 법

Real MySQL 복습을 진행하면서 가볍게 읽고 넘어갔지만 원리가 궁금해진 부분이 생겼다. InnoDB 스토리지 엔진에서는 갭 락과 넥스트 키 락을 어떻게 사용하길래 REPEATABLE READ 격리 수준에서도 팬텀 리드가 발생하지 않을까? 이 궁금증을 해소하고자 한다. REPEATABLE READ, 갭락과 넥스트 키 락에 대한 내용은 아래 포스팅에서 확인할 수 있다. https://devdebin.tistory.com/252 트랜잭션과 잠금 2023.10.9 복습 리팩토링 시작 트랜잭션 트랜잭션은 작업의 완전성을 보장해 준다. 즉, 정합성을 보장하기 위한 기능이다. 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 devdebin.tistory.com 팬텀 리드 팬텀 리드란 다른 ..

Database/SQL 튜닝

NL 조인 쿼리 튜닝

이번에는 생애 처음으로 토이 프로젝트의 쿼리를 튜닝해보았습니다. 프로젝트에서 제일 많이 호출되는 쿼리를 튜닝했는데 그 경험을 적어보겠습니다. 쿼리 튜닝 환경 M1 air RAM 16GB, SSD 512GB Docker 컨테이너 Mysql 8.x 버전 다대다 관계 튜닝하기 project라는 테이블과 member라는 테이블은 다대다 관계다. 중간 관계 테이블로 project_member라는 테이블이 존재한다. 테스트 데이터는 MySQL 프로시저를 활용해서 주입했으며 데이터 갯수는 아래와 같다. member: 200만 project: 500만 project_member: 1400만 먼저 쿼리를 살펴보자. 내가 참여한 모든 프로젝트를 조회하는 쿼리다. 디스코드 사이드 바에서 내가 참여한 모든 채팅방을 보여줄 때..

Database/SQL 튜닝

조인 튜닝 (1)

NL 조인 조인의 기본은 NL 조인이다. NL은 Nested Loops 조인의 약어다. 즉 중첩 루프문과 같은 수행 구조를 사용한다. 일반적으로 NL 조인은 Outer와 Inner 양쪽 테이블 모두 인덱스를 사용한다. Outer 쪽 테이블은 사이즈가 크지 않으면 인덱스를 이용하지 않을 수 있다. Table Full Scan 하더라도 그것은 한 번에 그치기 때문이다. Inner 쪽 테이블은 인덱스를 사용해야 한다. Inner 루프에서 외래키로 데이터를 검색할 때 인덱스를 이용하지 않으면, Outer 루프에서 읽은 건수만큼 Table Full Scan을 반복하기 때문이다. NL 조인은 '인덱스를 이용한 조인 방식'이라고 할 수 있다. 튜닝 포인트 Outer Table 인덱스를 읽고 나서 Outer Table..

Debin
'Database' 카테고리의 글 목록