【问题标题】:How to search a word in MySQL table? MATCH AGAINST or LIKE?如何在 MySQL 表中搜索单词?比赛反对或喜欢?
【发布时间】:2012-08-12 09:50:24
【问题描述】:

我为一些可能在不同国家/地区设有许多分支机构的公司提供了一张表格。这些国家/地区被插入到countries 字段中。
现在,我必须创建一个搜索系统,允许用户查找在特定国家/地区设有分支机构的公司。
我的问题是:我必须使用哪一个? MATCH AGAINSTLIKE ?查询必须搜索所有记录以找到完全匹配的项目。

  • 注意:记录可能有不同的国家名称,用逗号分隔。

【问题讨论】:

    标签: mysql search select sql-like match-against


    【解决方案1】:

    MATCH AGAINST 子句用于Full Text Search

    为此,您需要在搜索列 countries 上创建一个 full text index

    full text index 搜索比LIKE '%country%' serach 快得多。

    【讨论】:

    • 如果重要,请注意 MATCH AGAINST 纯粹是 MySQL,因此如果您想迁移数据库,则必须重新访问搜索算法。它确实比 LIKE 快得多,但 LIKE 是标准的,根据您的查询优化可能会很好。您必须进行测试才能确定。我更希望看到您将其分解为 alfasin 所描述的中间 company_country 表。
    【解决方案2】:

    我会更改实现:有一个包含多个值的字段是 bad idea,例如,它很难维护 - 您将如何从公司实现 remove 一个国家/地区? .

    我认为更好的方法是创建一个单独的表 companies_countries,其中包含两列:company_idcountry_id,并且每个 company 可以有多行。

    【讨论】:

    • 你是对的。我遇到的问题是stackoverflow.com/questions/11762293/…,貌似没有解决办法
    • 您的另一个问题是另一个问题。您可以更改实现并将所选国家/地区显示为 HTML 中的多值字段,但绝对不应将其存储为多值。
    【解决方案3】:

    您应该使用 LIKE 。因为@Omesh 提到MATCH AGAINST 子句用于全文搜索。。而全文搜索需要整列进行搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多