Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用部分字符串进行MySQL搜索_Mysql_Performance_Full Text Search - Fatal编程技术网

使用部分字符串进行MySQL搜索

使用部分字符串进行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

我们在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秒)。我们正在考虑使用全文搜索索引;任何提示/输入都将不胜感激。

定位功能很可能会更快:

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标准的一部分。