我想实现像在wiki上搜索一样的东西,当我想搜索“apple”时,我输入“a”它显示单词从“a”开始...我知道它可以在我键入时实现,我提交一个SQL查询来搜索文章从“a”开始,但是当查询请求越来越多时,它变得很慢......有没有任何性能转向技术来做这种事情?谢谢。
答案 0 :(得分:2)
在服务器端,您应该将结果缓存,最好是在内存中缓存(例如:Memcached)。因此,如果10个人点击“a”,那么对数据库只有一个查询,从内存中进行9个超快速数据访问。
对于带宽优化,您应该以JSON或某些自定义数据格式发送数据。请参阅此精彩文章: Building Fast Client-side Searches
答案 1 :(得分:1)
不确定您使用的SQL版本,但有一些假设:
我建议考虑减少根据搜索查询的大小返回的行数,例如:(伪代码,不知道你的SQL方言)
if len(searchString)<=3
select top 50 title from table order by title
else
select title from table order by title
较小的搜索可能会返回更多行,但大多数用户可能会在输入之前键入多个字母,因此对于初始查询,请不要返回所有行。
答案 2 :(得分:0)
不是技术性的答案可能是显而易见的,但对于客户方,我认为你可以不是在按键上启动你的搜索事件,而是在按键后的X毫秒之后,条件是没有任何改变。
因此,如果我想要搜索“单词”并且我快速地输入“w”“o”“r”“d”,那么您只能提出请求,显然您可以优化该请求SQL方式