在MySQL查询中使用Like和Concat

时间:2011-05-24 19:54:38

标签: mysql concat sql-like

我正在将文本文件加载到我的数据库中,并尝试在列出组织名称的表和包含文本文件的表以及与这些组织可能匹配的表之间进行快速匹配。

我使用LOAD INFILE CONCURRENT加载文件,并且没有任何问题。

扭曲来自于我在原始文本表(occupationoraffiliation)中尝试匹配的字段不仅包含组织名称。所以我试图使用带有通配符的LIKE来匹配字符串。

要匹配文字,我正在尝试使用此查询:

UPDATE raw_faca JOIN orgs AS o
    ON raw_faca.org_id IS NULL AND raw_faca.occupationoraffiliation LIKE CONCAT('%',o.org_name,'%')
SET raw_faca.org_id = o.org_id;

我也试过没有CONCAT

UPDATE raw_faca JOIN orgs AS o
    ON raw_faca.org_id IS NULL AND raw_faca.occupationoraffiliation LIKE ('%' + o.org_name + '%')
SET raw_faca.org_id = o.org_id;

raw_faca表有~40,000行,orgs表有~20,000行。我有所有的索引查询已经运行了几个小时左右 - 这似乎对操作来说太长了。比较我试图运行效率低下还是我在做一些非常愚蠢的事情?我希望避免与外部php或python脚本一行一行。

在回复以下关于使用Match . . . Against的评论时,我也尝试了以下查询:

UPDATE raw_faca JOIN orgs AS o ON raw_faca.org_id IS NULL AND MATCH(raw_faca.occupationoraffiliation) AGAINST (o.org_name IN NATURAL LANGUAGE MODE)
SET raw_faca.org_id = o.org_id; 

它给了我这个错误:

incorrect arguments to AGAINST

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

带有前导外卡的LIKE子句无法利用任何索引。