2

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

我使用加载文件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 脚本。

针对以下关于 using 的评论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

有什么想法吗?

4

1 回答 1

3

带有前导通配符的LIKE子句将无法利用任何索引。

于 2011-05-24T19:58:58.917 回答