[MySQL CRUD] 전문 검색 SELECT

코린이·2025년 8월 30일

MySQL 쿼리 성능 UP

목록 보기
1/4

전문 검색 SELECT

데이터에서 검색 키워드 중심으로 조회하는 방식을 역 인덱스(Inverted Index) 구조라고 부른다.

MySQL의 일반 인덱스는 B-Tree 기반으로, 등가(=) 조건이나 범위(>, <, BETWEEN) 조건에서는 효율적이지만, LIKE '%검색어%'와 같이 문자열의 일부를 검색할 때는 일반 인덱스를 활용하기 어렵다.

하지만 Full-Text Index는 텍스트 데이터를 단어 단위로 분리하여 인덱싱하기 때문에, 키워드 기반의 전문 검색을 빠르게 수행할 수 있다.

이러한 Full-Text Index 방식을 전문 검색(Full-Text Search)이라 한다.

※ 참고
단순 키워드 매칭이나 기본적인 텍스트 검색 수준이라면 MySQL의 Full-Text Search 기능만으로도 충분하다.

하지만 형태소 분석, 문맥 기반 검색, 다양한 조건 조합 등 고급 검색이 필요하다면, Elasticsearch 같은 전문 검색 엔진을 별도로 사용하는 것이 바람직하다.

FULLTEXT INDEX

MySQL에서 조건문에 LIKE %검색어% 방식으로 특정 검색어가 포함된 데이터를 조회할 수 있다.

하지만 LIKE %검색어% 조건은 인덱스를 사용할 수 없어서 별도의 FULLTEXT INDEX를 만들어 조회 성능을 높여야 한다.

FULLTEXT INDEX 생성

CREATE FULLTEXT INDEX fidx_posts ON posts(title, content);

전문 검색 (MATCH ~ AGAINST)

전문 검색을 사용하려면 FULLTEXT INDEX를 생성하고, 해당 컬럼을 대상으로 MATCH … AGAINST 구문을 사용해야 한다.

아래 예시는 title, content 컬럼에 "전문 검색"이라는 검색어가 포함된 데이터를 빠르게 조회하는 예시다.

SELECT *
FROM posts
WHERE 1=1
	AND MATCH(title, content) AGAINST('전문 검색' IN NATURAL LANGUAGE MODE)
;

전문 검색은 다양한 모드가 존재한다.

  • NATURAL LANGUAGE MODE
    • 가장 기본적인 검색 모드
    • 각 단어의 출현 빈도와 문서 내 중요도(가중치)를 기반으로 결과 조회
  • BOOLEAN MODE
    • 불리언 연산자(+, -, *)를 사용하여 검색 가능
  • IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
    • 검색 키워드 + 관련 키워드까지 고려하여 검색

0개의 댓글