Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Php 从MySQL查询中消除LIKE_Php_Mysql_Performance_Indexing - Fatal编程技术网

Php 从MySQL查询中消除LIKE

Php 从MySQL查询中消除LIKE,php,mysql,performance,indexing,Php,Mysql,Performance,Indexing,我需要一个建议。我有一张大桌子,上面摆满了单词(小写)。每行包含“id”(自动递增的int)和“word”(varchar(100))。我正在寻找更快的方法来搜索所有ID中可能包含给定子字符串的单词。我当前的查询如下所示: select id from `words` where `word` like '%substring%' 有没有办法将此表转换为一组表,这些表可以用来按索引而不是“like”进行搜索 我唯一的想法是将每个单词放到一组子字符串中,例如“mysql”可以分解为“My”、“m

我需要一个建议。我有一张大桌子,上面摆满了单词(小写)。每行包含“id”(自动递增的int)和“word”(varchar(100))。我正在寻找更快的方法来搜索所有ID中可能包含给定子字符串的单词。我当前的查询如下所示:

select id from `words` where `word` like '%substring%'
有没有办法将此表转换为一组表,这些表可以用来按索引而不是“like”进行搜索


我唯一的想法是将每个单词放到一组子字符串中,例如“mysql”可以分解为“My”、“mys”、“mysq”、“mysql”、“ysql”、“sql”、“ql”、“ys”、“sq”等。但这样我就进入了一个非常大的表中。

在思想层面上,也许您可以在每次键入字母时创建该表的实例,然后删除这些实例或在完成后将其置为空。使用全文搜索。现在使用InnoDB也可以了,这不是您要寻找的答案,但是让
类似的比较更快的是只使用一个通配符,而不是两个通配符:
'substring%'
'%substring'
只使用一个尾随通配符Mysql可以使用索引。在此基础上,您可以将字符串Mysql拆分为Mysql、ysql、sql、ql和l,然后只搜索类似的“substring%”。如果只搜索完整的单词,则可以在空格(和标点符号)上分解文本,对单词进行键控阅读,并使用“仅使用类似语法在键控阅读返回的行上搜索短语”(通过这种处理,还可能处理拼写错误)。但全文搜索可能会更好。如果使用“不区分大小写”排序规则,则不必使用小写。在思想层面上,您可以在每次键入字母时创建该表的实例,然后删除这些实例,或者在完成后将其设为空。使用全文搜索。现在使用InnoDB也可以了,这不是您要寻找的答案,但是让
类似的比较更快的是只使用一个通配符,而不是两个通配符:
'substring%'
'%substring'
只使用一个尾随通配符Mysql可以使用索引。在此基础上,您可以将字符串Mysql拆分为Mysql、ysql、sql、ql和l,然后只搜索类似的“substring%”。如果只搜索完整的单词,则可以在空格(和标点符号)上分解文本,对单词进行键控阅读,并使用“仅使用类似语法在键控阅读返回的行上搜索短语”(通过这种处理,还可能处理拼写错误)。但是全文搜索可能会更好。如果使用“不区分大小写”的排序规则,则不需要小写。