1

使用可变长度的术语 PHP 数组(即它可能是 50 个术语,也可能是 400 个),在我的数据库中搜索这些术语中的每一个的最有效方法是什么?

我正在尝试进行的搜索非常简单。对于每个学期,我想做:

SELECT id, post_title FROM wp_posts WHERE post_title LIKE %term%

显然,我可以foreach在 PHP 中运行 a 并运行多个 MySQL 查询,但我认为这非常低效。

我最近尝试过的代码涉及多个OR语句,但是使用大约 100 个术语,它似乎运行得很慢。

我不知道这样的事情是否可行?

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

我可以使用更有效的 SQL 语句,还是应该以不同的方式看待它?

4

4 回答 4

2

Stock MySQL 可以使用

MATCH (post_title) AGAINST ('term1 term2 term3 term4')

要进行此搜索,您需要使用将全文索引添加到表中

ALTER TABLE wp_posts ADD FULLTEXT INDEX ft_key1(post_title);

这将比 LIKE %term% 快得多,但请注意,全文索引仅在 MyISAM 表中受支持(InnoDB 从 MySQL 5.6 开始支持此语法)。

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

如果您决定切换到 Sphinx,您可能需要查看本指南http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/

于 2012-06-26T17:50:45.380 回答
0

Create an additional index holding a single column where you simply concatenate the values of all table columns you want to query during the search. This way you can use a single SELECT query with a LIKE clause to search through all columns at once.

This is often referred to as "full text search".

于 2012-06-26T15:45:56.580 回答
0

Using MySQL the most efficient way is to set up Full-text searching... http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

于 2012-06-26T15:47:34.417 回答
0

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

SELECT id, post_title FROM wp_posts WHERE FIND_IN_SET(post_title, '%term1%, %term2%, %term3%, %term4%') <> 0
于 2012-06-26T19:27:38.087 回答