我最近正在做一些字符串搜索从一个约50k字符串的表中,我相当大,但不是那么大。我正在做一些“搜索结果内”的嵌套查询。我使用LIKE语句来获得搜索关键字的匹配。MySQL全文搜索,但使用LIKE
我遇到了MySQL的全文搜索,我尝试过,所以我在我的str
列中添加了一个全文索引。我知道全文搜索不适用于几乎创建的表格,甚至不适用于Views
,因此具有子选择的查询将不适用。我提到我在做一个嵌套查询,例如是:
SELECT s2.id, s2.str
FROM
(
SELECT s1.id, s1.str
FROM
(
SELECT id, str
FROM strings
WHERE str LIKE '%term%'
) AS s1
WHERE s1.str LIKE '%another_term%'
) AS s2
WHERE s2.str LIKE '%a_much_deeper_term%';
这其实不是适用于任何代码呢,我只是在做一些测试。此外,通过使用Sphinx(性能明智)可以轻松地实现像这样搜索字符串,但是让我们考虑一下Sphinx不可用,并且我想知道如何在纯SQL查询中很好地工作。在没有添加全文的表上运行此查询大约需要2.97 secs
。 (取决于搜索词)。但是,在全表中添加全文并在str
列中添加了查询的结果是104ms,这很快(我认为?)。
我的问题很简单,就是它有效使用LIKE或者是一个很好的做法,在一个表中都使用它全文加入时,我们通常会使用MATCH和反对报表?
谢谢!
您可以在nester SQL的**最内层**查询中始终使用全文索引。当然,这取决于你是否在寻找** wole words **的事实。 – vbence 2011-04-07 11:00:58
@vbence真棒,我只是试图在最内层的查询结果是在15ms完成。这是在我的本地主机顺便说一句,但它更快地替换WHERE MATCH(str)AGAINST('term')WHERE str LIKE'%term%':) – tradyblix 2011-04-07 11:08:31
大问题是,你只搜索完整的单词吗? – vbence 2011-04-07 11:23:33