2011-11-24 2 views
1

나는 주로 검색을 위해 설계된 php-mysql 기반 웹 사이트에서 일하고있다. 이전에 모든 쿼리에서 LIKE 연산자를 사용했습니다. 그러나 필드 목록을 통해 여러 키워드를 검색 할 수 있으므로 SQL이 너무 커지고 복잡해지고 있습니다. FULLTEXT 검색은 성능을 향상시킬뿐만 아니라 쿼리를보다 쉽게 ​​읽을 수있게 해줍니다. 그러나 전체 텍스트 검색을위한 나는 다음과 같은 문제가 있습니다Mysql LIKE 또는 FULLTEXT 검색 - 여기서는 어느 것을 사용하십니까?

  1. 내가이어야 끝에서, 예를 와일드 문자를 사용 할 수 있습니다.

$의 SQL =는 mysql_query ("테이블에서 선택 * MATCH WHERE (필드 1, 2 필드, FIELD3, 입력란 4) AGAINST ('+ VAL1을 val2 * + * + * val3');"); 대신

$의 SQL =는 mysql_query의

("테이블 SELECT * FROM WHERE (LIKE '%의 VAL1 %의'OR filed2 LIKE '%의 VAL1 %의'OR filed3 LIKE '%의 VAL1 %의'filed1 (filed1 LIKE '% val2 %'또는 'filed1 LIKE'% val2 % '또는'filed1 LIKE '% val2 %'OR filed4 LIKE '% val2 %') % val3 % 'OR filed2 LIKE'% val3 % '또는'filed3 LIKE '% val3 %'OR filed4 LIKE '% val3 %') ");

이전 쿼리가 실제로 두 번째 성능을 향상시킬 수 있습니까? 사전 검색의 경우 사용자 입력은 결과와 일치하는 키워드이거나 결과와 일치하지 않는 키워드 일 수 있습니다. 그래서 내 SQL은 다음과 같이 진행됩니다 (

$의 SQL =는 mysql_query "테이블 SELECT * FROM WHERE (LIKE '%의 VAL1 %의'OR filed2 LIKE '%의 VAL1 %의'OR filed3 LIKE '%의 VAL1 %의'filed1 (filed1 LIKE '% val2 %'또는 'filed1 LIKE'% val2 % '또는'filed1 LIKE '% val2 %'OR filed4 LIKE '% val2 %') % val3 % 'OR "filed2 % like val1 % OR1"% val1 % OR1 "% val1 % OR1"% val2 % OR1) '% val1 %') 및 (filed1 NOT LIKE '% val2 %'OR filed2 NOT LIKE '% val2 %'OR filed3 NOT LIKE '% val2 % '또는 filed4 NOT LIKE '% val2 %') AND (filed1 NOT LIKE '% val3 %'OR filed2 '% val3 %'또는 'filed3 NOT LIKE'% val3 % ''또는 'filed4 NOT LIKE'% val3 % '와 같은 것) ");

이것은 조용하게 읽을 수있는 것이 아니므로 검색 성능이 느려집니다. 그러나 이것이 FULLTEXT 검색을 사용하여 수행 할 수 있는지 여부는 확실하지 않습니다. 그렇다면 쿼리는 무엇입니까?

그리고 마지막으로 내 질문은 입니다. 검색을 위해 WHERE/LIKE를 사용하거나 FULLTEXT 검색을해야하나요?

P. 내 데이터베이스는 단지 1000 개의 행과 10 개의 필드가있는 작은 데이터베이스입니다.

+1

도움이 될 수 있습니다 : http://stackoverflow.com/questions/224714/what-is-full-text-search-vs-like –

+0

데이터베이스가 작고로드가 적 으면 실제로는 차이를 만들다. –

+0

두 번째 쿼리에서 올바른 결과를 얻지 못했습니다. 그것 **을 전혀 고려하지 않는 ** ** 일부. 여기서 뭐가 잘못 됐어? – thelastray

답변

0

고급 텍스트 기반 검색의 경우, 둘 다 최적이 아닙니다. 대신 LuceneSolR과 같은 전용 텍스트 검색 엔진을 사용해야합니다.

이들은이 문제를 해결하기 위해 작성되었습니다. 올바른 작업 도구를 사용하는 것이 좋습니다.