MySQL - like/fulltext 차이, fulltext 인덱싱 방법, 사용법

반응형

# 문자열 포함 함수 like

  • 특정 문자가 포함되어 있는 모든 글자를 검색
  • 즉, 단어 사이에 있어도 찾고자 하는 문자열이 있으면 검색
  • 정확도는 높지만 속도가 느림

 

예시) 영화 제목에서 kill이 들어간 영화 검색

  • kill이 단어 사이에 있어도 검색
-- select 컬럼명 from 테이블명 where 컬럼명 like '검색어'
select title from movie where title like '%kill%';

 

# 문자열 컬럼 FULLTEXT 인덱싱

  • 특정 문자를 한개의 블럭으로 인식(인덱싱)하여 검색
    • 인덱싱 : 블럭별로 목차를 만들어서 검색
  • 즉, 찾고자 하는 문자열을 단어별로 검색
  • 정확도는 낮을 수 있지만 속도가 빠름

 

예시) 영화 제목에서 kill이 들어간 영화 검색

  • kill이 단어로만 되어 있는 영화 검색
-- select 컬럼명 from 테이블명 where match(컬럼명) against('검색어')
select title from movie where match(title) against('kill');

 

# 컬럼을 FULLTEXT 인덱싱 하는 방법

  • MySQL Workbench를 이용해서 설정하는 방법
    • Table 설정에서 Indexes 탭 이동 후 설정

 

  • SQL 쿼리문으로 설정하는 방법
  • ALTER TABLE '테이블' ADD FULLTEXT INDEX '인덱스명' () VISIBLE;
  • -> ALTER TABLE `movie_db`.`movie` ADD FULLTEXT INDEX `m.title` () VISIBLE;
    (위의 MySQL과 같은 테이블 예시)

 

# FULLTEXT 인덱스를 이용해서 검색하는 방법

사용하는 방법은 검색엔진에서 사용하는 방법과 많이 비슷함

 

  • and 검색 : 모든 검색어가 포함되는 데이터 조회
select * from 테이블명 where match(컬럼명) against('검색어1 + 검색어2' IN BOOLEAN MODE);

 

 

  • or 검색 : 둘 중 하나라도 포함되는 데이터 조회
select * from 테이블명 where match(컬럼명) against('검색어1 검색어2');

 

  • 검색어1이 포함된 데이터에서 검색어2가 들어간 것을 제외
select * from 테이블명 where match(컬럼명) against('검색어1 - 검색어2' IN BOOLEAN MODE);

 

  • 공백이 포함된 검색어 조회
select * from 테이블명 where match(컬럼명) against('검색어 검색어');
반응형