【问题标题】:Mysql full-text-search query executionMysql全文搜索查询执行
【发布时间】:2011-04-21 10:59:58
【问题描述】:

祝大家好运

只是想知道以下查询的区别:

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 

已编辑

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

【问题讨论】:

    标签: mysql search full-text-search


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这个查询:

      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,并且使用该索引搜索匹配项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-22
        相关资源
        最近更新 更多