Mysql全文搜索查询执行

时间:2011-04-21 10:59:59

标签: mysql search full-text-search

让所有人满意

想了解以下查询的不同之处:

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 

被修改

实际上两者都获得了正确的结果,第二个是获得更多的结果,第一个只获得正确的结果。第二个是花费大量时间执行结束,第一个要快得多。不知道为什么。

2 个答案:

答案 0 :(得分: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

只会在'apple'thread_title中返回包含first_post的记录。返回的所有相关性将大于0

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

答案 1 :(得分:1)

第一个查询只会返回与您设置的限制匹配的行的结果(即,在thread_title或first_post中包含apple的结果),而第二个将返回所有行,而不管它们是否包含是否匹配您的搜索查询。