2011-04-21 141 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 

会从表中返回所有记录(含relevance = 0对于不包含任何'apple'那些)。

这个查询:

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_titlefirst_post'apple'记录。返回的所有相关性将大于0

第二个查询更快,因为您最有可能在posts (thread_title, first_post)上有FULLTEXT INDEX,并且使用该索引搜索匹配项。

1

第一个查询将仅返回匹配您设置的限制的行的结果(即,那些包含Apple在thread_title或first_post中的结果),而第二个查询将返回所有行,无论它们包含的事实如何与您的搜索查询匹配或不匹配。