<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" />

B+Tree 와 EXPLAIN ANALYZE 보는 법에 대한 선행 지식이 필요함.

https://engineerinsight.tistory.com/336

(선행 지식) EXPLAIN ANALYZE 보는 법

</aside>

서론

개발을 진행하면 할 수록 필터링 조건이 많아지게 되어 원본 데이터를 효율적으로 조회하기 어려워져, 원본 데이터에서 필터링에 필요한 컬럼들만 가져와 반정규화 하여 별도의 검색 전용 테이블을 두는 방법으로 쿼리 성능을 높이려고 했음. 추가 인프라나 데이터베이스 교체 없이 지금 사용중인 MySQL 환경에서만 최적화하는 것이 목표였다.

그런데, 1:N 관계 대표적으로 Product 와 Category 관계처럼 하나의 엔티티가 N개의 값들을 가질때 반정규화 구조를 설계하기가 쉽지 않았다. 그래서 MySQL 공식문서들로 LLM들을 괴롭힌 결과 FTS(FTI 적용) 방법과 JSON 조회(MVI 적용)로 최적화할 수 있다는 이야기를 듣고 실제로 도입이 가능한지 성능 테스트를 진행함.

Multi Value Index (MVI)

Multi Value Index 동작 그림 - 출처 : GPT o4-mini-high 가 만듬

Multi Value Index 동작 그림 - 출처 : GPT o4-mini-high 가 만듬

INSERT 동작

  1. JSON 배열 저장
  2. Virtual Column Expansion
  3. B+Tree 인덱스 생성

SELECT 동작

  1. 쿼리 파싱
  2. 인덱스 조회 (B+Tree Search)
  3. Row ID 추출 후 데이터 로드

MVI 지원 함수와 예시