2011-04-21 3 views
2

Greerings 모두MySQL의 전체 텍스트 검색 쿼리 실행

그냥 다음 쿼리의 차이를 알고 싶습니다 :

select*, MATCH (thread_title, first_post) AGAINST ('apple' IN BOOLEAN MODE) as relevance from posts where MATCH(`thread_title`, `first_post`) AGAINST('apple' IN BOOLEAN MODE) ORDER BY relevance DESC 

select*, MATCH (thread_title, first_post) AGAINST ('apple' IN BOOLEAN MODE) as relevance from posts ORDER BY relevance DESC 

는 사실

을 편집을 둘 다 정상에 적당한 결과를 얻고 있고, 두 번째는 더 많은 결과를 얻고 있으며 첫 번째는 올바른 결과 만. 두 번째는 많은 시간을 들여 첫 번째 실행이 훨씬 빠릅니다. 이유를 모르겠다.

답변

1

이 쿼리 :

SELECT *, 
     MATCH (thread_title, first_post) AGAINST ('apple' IN BOOLEAN MODE) AS relevance 
FROM posts 
ORDER BY 
     relevance DESC 

가 (더 'apple'를 포함하지 않는 사람들을 위해 relevance = 0으로) 테이블에서 모든 레코드를 반환합니다.

이 쿼리 :

SELECT *, 
     MATCH (thread_title, first_post) AGAINST ('apple' IN BOOLEAN MODE) AS relevance 
FROM posts 
WHERE MATCH (thread_title, first_post) AGAINST ('apple' IN BOOLEAN MODE) 
ORDER BY 
     relevance DESC 

thread_title 또는 first_post 중 하나에 'apple'를 포함하는 레코드를 반환합니다. 반환 된 모든 관련성은 0보다 커집니다.

posts (thread_title, first_post)에 대부분 FULLTEXT INDEX이 있고 그 색인을 사용하여 일치 항목이 검색되므로 두 번째 쿼리가 빠릅니다.

1

첫 번째 쿼리는 설정 한 제한과 일치하는 행 (예 : thread_title 또는 first_post에 apple이 포함 된 결과)에 대해서만 결과를 반환하지만 두 번째 쿼리는 포함 된 사실에 관계없이 모든 행을 반환합니다 귀하의 검색어에 대한 일치 여부.