검색결과 리스트
FULLTEXT에 해당되는 글 1건
- 2013.10.17 MySQL FullText 검색
글
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
보통 쿼리로 검색을 할 때 아래와 같이 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 쿼리
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);
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% 는 인덱스를 타지 않고 대용량에서 하나씩 대입되는지 확인해야하는데, 더 느리다는 댓글이 있어 아래 링크를 참고하기 위해 걸어둔다.
https://www.clien.net/service/board/park/6649702
'-- MySQL' 카테고리의 다른 글
쿼리에서 Split처럼 문자열의 요소값을 얻기 (0) | 2015.02.09 |
---|---|
모든 Stored Procedure, Function의 내용 검색 (0) | 2015.02.09 |
MySQL 대용량 Insert (0) | 2013.10.15 |
반올림, 버림 (0) | 2013.08.20 |
MySQL Transaction Isolation Level (0) | 2013.08.08 |
RECENT COMMENT