MySQL搜索使用部分字符串

时间:2014-06-24 21:07:58

标签: mysql performance full-text-search

我们在MySQL上有一个ISAM表,其中包含有关产品的信息。该表有大约3M行(2GB),我们需要根据可能包含在三个不同字段(两个是索引)的部分字符串搜索一个部分。

要搜索包含子字符串xyzabc以及efg的行,我们目前正在使用以下查询:

SELECT field1,field2,field3 FROM `TABLE`
WHERE CONCAT_WS(' ',field1,field2,field3,'') LIKE '%xyz%'
  AND CONCAT_WS(' ',field1,field2,field3,'') LIKE '%abc%'
  AND CONCAT_WS(' ',field1,field2,field3,'') LIKE '%efg%'
ORDER BY `field1` 

显然,表现很糟糕(15秒)。我们正在考虑使用全文搜索索引;任何提示/输入将不胜感激。

1 个答案:

答案 0 :(得分:0)

定位功能最有可能更快:

SELECT field1,field2,field3 
FROM TABLE 
WHERE 
(
locate('xyz',field1) > 0
or    locate('xyz',field2) > 0
or    locate('xyz',field3) > 0
)
and 
(
locate('efg',field1) > 0
or    locate('efg',field2) > 0
or    locate('efg',field3) > 0
)
ORDER BY field1