[친절한 SQL 튜닝] LIKE %KEYWORD%는 인덱스 사용이 아예 불가능할까?

Euiyeon Park·2025년 6월 8일
0

친절한 SQL 튜닝

목록 보기
11/13
post-thumbnail

LIKE 연산자와 인덱스 사용 여부

WHERE 업체명 LIKE '%대한%'
  • 와일드카드 %가 앞에 위치하면 문자열의 시작 위치가 불확실하여,
    인덱스를 사용 불가능(Range Scan 불가능)❌
  • 일반적으로 Table Full Scan이 수행된다.
WHERE 업체명 LIKE '대한%'
  • 와일드카드가 뒤에만 위치한 경우, 문자열의 시작이 고정되므로
    B-Tree 인덱스를 활용한 Range Scan이 가능

그런데 LIKE 연산자에서도 사용 가능한 인덱스가 있다 ..? 👀

LIKE '%KEYWORD%' 같은 접두어가 없는 패턴 검색은
B-Tree 인덱스로는 인덱스 사용이 불가능하지만,
전문 검색(FULL TEXT SEARCH) 기술을 도입하면 인덱스를 통한 효율적인 검색이 가능하다.

1. InnoDB Full Text Index

  • %KEYWORD% 처럼 중간 또는 끝에 있는 단어 검색 가능
  • MATCH(column) AGAINST('keyword' IN BOOLEAN MODE) 형식으로 사용
  • 내부적으로 역색인(Inverted Index)을 활용하므로, 중간 검색도 빠름

✅ FULL TEXT INDEX의 역색인 구조는 일반 인덱스의 B-Tree 구조와 다름!

2. n-gram parser

  • 한글처럼 공백 없는 언어 지원을 위해 도입
  • FULL TEXT INDEX에 WITH PARSER ngram 설정 필요
  • 한글 포함 문자열에서도 '%KEYWORD%' 검색 최적화 가능

3. ElasticSearch - 외부 전문 검색 엔진

  • 외부에 데이터를 연동해서 사용하는 방식.
  • LIKE '%keyword%'가 아닌, matchwildcard 등 다양한 검색 쿼리 제공
  • 중간 단어, 복합 키워드, 형태소 분석까지 고도화 가능.
  • 대규모 검색 시스템에 적합 (쇼핑몰 검색, 리뷰 검색 등)

FULL TEXT INDEX를 활용한 개발 경험 사례 공유

FULL TEXT INDEX을 사용한 개발 및 학습 일지
FULL TEXT INDEX를 도입한 개발 PR

profile
"개발자는 해결사이자 발견자이다✨" - Michael C. Feathers

0개의 댓글