使用部分字符串进行MySQL搜索
我们在MySQL上有一个ISAM表,其中包含有关产品的信息。该表大约有3M行(2GB),我们需要根据可能包含在三个不同字段(两个是索引)中的部分字符串搜索部分 要搜索具有子字符串使用部分字符串进行MySQL搜索,mysql,performance,full-text-search,Mysql,Performance,Full Text Search,我们在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,fi
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秒)。我们正在考虑使用全文搜索索引;任何提示/输入都将不胜感激。定位功能很可能会更快:
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
谢谢你的建议。我们对locate进行了基准测试,在大多数测试中,它在我们的DB上没有做得更好;此外,Locate仅由MySQL支持,而Like是SQL标准的一部分。