让所有人满意
想了解以下查询的不同之处:
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
实际上两者都获得了正确的结果,第二个是获得更多的结果,第一个只获得正确的结果。第二个是花费大量时间执行结束,第一个要快得多。不知道为什么。
答案 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的结果),而第二个将返回所有行,而不管它们是否包含是否匹配您的搜索查询。