我们在MySQL上有一个ISAM表,其中包含有关产品的信息。该表有大约3M行(2GB),我们需要根据可能包含在三个不同字段(两个是索引)的部分字符串搜索一个部分。
要搜索包含子字符串xyz
和abc
以及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秒)。我们正在考虑使用全文搜索索引;任何提示/输入将不胜感激。
答案 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