MySQL FullText 검색 -- MySQL




보통 쿼리로 검색을 할 때 아래와 같이 LIKE검색을 하게 된다.

SELECT * FROM test WHERE name LIKE '%search%';

그런데, LIKE 자체가 LIKE '%search%'처럼, 왼쪽에도 %를 걸면 인덱스를 타지 않아 속도가 느리다.
더욱이 테이블의 용량이 대용량으로 갈수록 더더욱 느린 결과를 나타낼 수 밖에 없다.
그래서, 여느 DBMS와 마찬가지로 MySQL도 FULLTEXT검색을 지원한다.

- MyISAM엔진에서 지원
- CHAR, VARCHAR, TEXT 타입에서 지원


1. FULLTEXT INDEX 생성

CREATE FULLTEXT INDEX idx_ft_name ON test (name);

만약 MyISAM엔진이 아니라면, FULLTEXT INDEX를 지원하지 않은 engine type이라고 에러가 난다.


2. FULLTEXT 쿼리

1) 특정 단어에 대해 검색할 때
SELECT * FROM test WHERE MATCH(name) AGAINST("tiger");

2) 두 단어가 포함하여 검색할 때
SELECT * FROM test WHERE MATCH(name) AGAINST(' + "tiger" + "lion"' IN BOOLEAN MODE);

3) 두 단어는 포함하고 특정 단어는 포함하지 않고 검색할 때
SELECT * FROM test WHERE MATCH(name) AGAINST(' + "tiger" + "lion" - "leopard"' IN BOOLEAN MODE);


추가) 2017-09-27

댓글을 다시 곰곰히 읽어보니 밑에 LIKE문을 써놔서 FULLTEXT랑 LIKE랑 완전히 같다는 착각을 일으킬 수 있다고 생각되어 해당 부분은 설명으로 대치해두었다.

LIKE %keyword% 는 인덱스를 타지 않고 대용량에서 하나씩 대입되는지 확인해야하는데, 더 느리다는 댓글이 있어 아래 링크를 참고하기 위해 걸어둔다.

http://crystalcube.co.kr/163

https://www.clien.net/service/board/park/6649702

http://www.database.sarang.net/?inc=read&aid=15466&criteria=mysql&subcrit=&id=&limit=20&keyword=%ED%8C%8C%EC%9B%8C%EB%B9%8C%EB%8D%94+%26+sqlstate&page=1


덧글

  • 테스트 좀 해보고 2017/09/26 14:20 # 삭제 답글

    옛날글에 댓글 달아서 좀 그렇긴 합니다만

    테스트 좀 제대로 해보고 글 싸지르세요.

    like 랑 match랑 전혀 다른데 자기한테 맞는 케이스 몇개 테스트해보고 같다고 싸지른거 보니 열받아서 개 열폭 하고갑니다.
  • 어린왕자 2017/09/27 16:35 # 답글

    https://kmongcom.wordpress.com/2014/03/28/mysql-%ED%92%80-%ED%85%8D%EC%8A%A4%ED%8A%B8fulltext-%EA%B2%80%EC%83%89%ED%95%98%EA%B8%B0/

    http://blog.acronym.co.kr/575

    글의 어디에서 화가 나셨는지 모르겠으나 속도문제로 FULLTEXT라는 것을 사용할 수 있다가 요지입니다. 올린 링크들도 비슷한 내용으로 소개하고 있구요. 이 댓글을 보실지 모르겠으나 다른 곳에서라도 개 열폭하시려거든 익명이 아니라 당당히 메일이라도 남기시죠.

    아무리 익명공간이라지만 자신의 생각과 다르거나 혹은 내용이 틀리다고 이리 말씀하시는 것을 보면, 제 생각엔 더 인성을 기르셔야 하지 않을까 싶네요. 블로그를 하면서 이런 분이 가끔 있어서 안타까울 때가 많네요.
  • 테스트좀 해보고 에 2018/09/12 21:22 # 삭제 답글

    생각이 다를 수도 있지 위에분 말하는거 보니 부모님이 참 인성 교육 드릅게 싸질렀나 보네요
  • 어린왕자 2018/09/14 17:22 # 답글

    지금에서 생각하면 블로그에서 취득한 정보로 크게 곤혹을 치뤘었나 봅니다. ^^
  • UniPixel 2018/09/17 03:25 # 삭제 답글

    입에 걸레 물었나... 당신은 교육 참 잘 받으셨나 봅니다... 말하는 꼬라지가 아주 그냥 ㅋㅋㅋㅋ
댓글 입력 영역



20140817_300_250

통계 위젯 (화이트)

47227
1037
1030810