Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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表中搜索大量术语最有效的方法是什么?_Php_Mysql_Full Text Search - Fatal编程技术网

Php 在多个MySQL表中搜索大量术语最有效的方法是什么?

Php 在多个MySQL表中搜索大量术语最有效的方法是什么?,php,mysql,full-text-search,Php,Mysql,Full Text Search,以一个长度可变的PHP术语数组为例,它可以是50个术语,也可以是400个术语,在我的数据库中搜索每个术语最有效的方法是什么 我试图做的搜索非常简单。对于每个学期,我都想做: SELECT id, post_title FROM wp_posts WHERE post_title LIKE %term% 显然,我可以在PHP中运行foreach并运行多个MySQL查询,但我认为这是非常低效的 我最近尝试过的代码涉及多个OR语句,但对于大约100个术语,它的运行速度似乎非常慢 我不知道这样的事情会

以一个长度可变的PHP术语数组为例,它可以是50个术语,也可以是400个术语,在我的数据库中搜索每个术语最有效的方法是什么

我试图做的搜索非常简单。对于每个学期,我都想做:

SELECT id, post_title FROM wp_posts WHERE post_title LIKE %term%
显然,我可以在PHP中运行foreach并运行多个MySQL查询,但我认为这是非常低效的

我最近尝试过的代码涉及多个OR语句,但对于大约100个术语,它的运行速度似乎非常慢

我不知道这样的事情会不会奏效

SELECT id, post_title FROM wp_posts WHERE post_title LIKE %term1%, %term2%, %term3%, %term4%, [...]

我可以使用更高效的SQL语句吗?或者我应该以不同的方式来看待这一点吗?

创建一个包含单个列的附加索引,在该索引中,您只需将搜索期间要查询的所有表列的值连接起来。这样,您可以使用带有LIKE子句的单个SELECT查询一次搜索所有列


这通常被称为全文搜索

使用MySQL最有效的方法是设置全文搜索

Stock MySQL可以使用

MATCH (post_title) AGAINST ('term1 term2 term3 term4')
要执行此搜索,您需要使用将全文索引添加到表中

ALTER TABLE wp_posts ADD FULLTEXT INDEX ft_key1(post_title);
这将比%term%快得多,但请注意,从MySQL 5.6开始,InnoDB就支持这种语法,只有在MyISAM表中才支持全文索引

然而,随着数据的增长,捆绑式MySQL搜索速度可能会成为一个问题。在这种情况下,我建议使用外部搜索引擎,如Solr或Sphinx


如果你决定改用斯芬克斯,你可能想看看这本指南

我不知道它是否比其他建议更有效,但你也可以这样做

SELECT id, post_title FROM wp_posts WHERE FIND_IN_SET(post_title, '%term1%, %term2%, %term3%, %term4%') <> 0

MySql的搜索真的很糟糕,即使你使用全文搜索你也不会得到你需要的。如果可以的话,我建议您使用Lucene或Solr。我同意-全文可能不会给出您想要的内容,并且需要花费大量的努力才能正确。。。如上所述,如果可以,建议您这样做。否则,请确保索引正确,然后尝试全文:|