2011-04-21 177 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中的結果),而第二個查詢將返回所有行,無論它們包含的事實如何與您的搜索查詢匹配或不匹配。