在我的MySQL数据库中,我有一个产品表,其中包含近625k行。该表有162列。
现在我的主页上有一个搜索框,您可以在其中搜索任何内容,如果您的搜索词与我的任何产品标题均匹配,它将为您提供15种产品的列表。这类似于亚马逊和其他电子商务网站。
到目前为止,我所做的是创建一个包含所有产品ID和标题名称的JSON文件。当用户在搜索字段中输入至少3个字符时,将发出AJAX请求并获取列表。但是我的问题是,JSON文件的大小几乎为12MB,每当用户写一个char或删除一个char时,ajax就会调用它。在我使用本地计算机之前,它一直运行良好,现在,当我启用它时,它对用户来说不起作用,互联网连接速度低于5 MBPS。因此,我正在寻找一些建议,如何像亚马逊一样快速创建它。我的意思是从625K产品中自动搜索建议。
P.S-我不想从搜索中进行数据库调用,因为它会使应用程序崩溃,因为3个字符和一个“喜欢”查询“ GOD” ....!请帮助我。
先谢谢您:)
答案 0 :(得分:1)
真的很抱歉,但是这里没有什么可以作为建议的了,然后“去读一下数据库设计和模式规范化”。
如果表中有162列,则将永远无法进行有效的搜索。数据库(尤其是MySQL)不会将表保存在内存中,索引也无济于事。是的,您可以将其全部放入ElasticSearch实例中,它将解决您的一些问题。但是,老实说,此解决方案无法清除您的混乱情况。
您应该在一个列(或价格的数字列等)中有一个包含相关信息(标题,名称等)的表。此元数据应引用主表,该列应为全文索引。这样,您可以从主表中请求匹配项,过滤结果和JOIN
条相关行。使用很少的资源即可快速运行。