Php MySQL:通过单词搜索提高查询时间 脚本

Php MySQL:通过单词搜索提高查询时间 脚本,php,mysql,search,Php,Mysql,Search,我在一个销售产品的网站上有一个搜索工具。 该页面是用PHP和MySQL搜索合并视图构建的,合并视图将10多个表连接在一起。视图中约有12000条记录,每条记录包含20多个字段 用户可以使用多个(10-15)选择菜单搜索符合特定条件的产品 然后,数据库根据“产品”主键的“选择”菜单值返回结果 这一切都很好,并在一个足够快的速度,因为它是 问题 然而,在同一页上,我还包括了一个文本框,这样用户就可以手动输入他们正在搜索的内容,而不是使用菜单 由于用户输入的是实际单词,而不是通过菜单选择PK,因此数据

我在一个销售产品的网站上有一个搜索工具。
该页面是用PHP和MySQL搜索合并视图构建的,合并视图将10多个表连接在一起。视图中约有12000条记录,每条记录包含20多个字段

用户可以使用多个(10-15)选择菜单搜索符合特定条件的产品
然后,数据库根据“产品”主键的“选择”菜单值返回结果

这一切都很好,并在一个足够快的速度,因为它是

问题 然而,在同一页上,我还包括了一个文本框,这样用户就可以手动输入他们正在搜索的内容,而不是使用菜单

由于用户输入的是实际单词,而不是通过菜单选择PK,因此数据库必须进行单词搜索。 由于缺乏更好方法的知识,我将国外标准表中的所有文本值集中到一个大字段中。
然后,文本框将搜索此连接字段中的单词

同样,这很好,但将典型的搜索时间从0.1秒更改为2.0秒。
我从合并视图使用的表中为所有字段编制了索引,以改进时间,但这一点都没有帮助

问题: 由于谷歌可以在1秒内找到22200000页的“溢出”一词,而我的数据库只需2秒钟就可以根据12000条记录搜索一个词


如何提高数据库的布局和搜索方法?

你应该考虑把单词保存在内存中,这样你就不必每次需要单词搜索就可以打到数据库。将单词组合成数据结构是可行的,您只需在部署时从数据库构建数据结构。

MySQL可以在一个或多个列上创建
全文索引。发件人:

MySQL中的
FULLTEXT
索引允许数据库管理员和程序员将任何基于字符的字段(
CHAR
VARCHAR
,或
TEXT
)指定为
FULLTEXT
索引,这允许对存储在这些字段中的数据进行复杂文本搜索

不要将此功能与MySQL中的
LIKE
函数混淆
LIKE
更像正则表达式。另一方面,
FULLTEXT
索引是完全索引的字段,支持停止字、布尔搜索和相关性评级

我把所有的课文都浓缩了 国外标准中的价值观 把桌子放在一个大场地里。文本框 然后搜索内部的单词 这片凹凸不平的田野

这对我来说毫无意义。您是否尝试过在适当的字段上使用WHERE-LIKE?我错过了什么吗?

在这种情况下,我强烈推荐。它有一个反向索引系统,非常适合这项任务。您可以将它与PHP一起使用(通过前端与它进行接口)


试一试(至少看看一些教程),你会惊讶于自己的启动和运行速度有多快。

将你的web应用程序与谷歌进行比较就是将苹果与橙子进行比较。他们甚至不使用传统的数据库,而是使用面向列的数据仓库(称为BigTable)来存储数据。它还分布在数千台服务器上,因此速度当然会更快。他们花了数年的时间来加快他们的查询速度。当然,我不希望有任何地方能比得上谷歌的强大。我只是想学习一种比我上面所说的更好的单词搜索方法。这是我自己想出的一种方法,不一定是最佳实践。这样做的原因是我必须针对外部表中的15+个字段创建一个LIKE语句。因为我使用的是视图,所以将它们连接到一个字段似乎更有意义。感谢指针,Lucene和Sphinx已经提到过几次了。我必须开始阅读了。全文搜索正在寻找我最喜欢的赌注,有人知道这是否可以用于合并视图,或者我是否必须删除视图?