Asp.net 大型数据集的自动完成优化

Asp.net 大型数据集的自动完成优化,asp.net,linq-to-sql,jquery-ui,data-access-layer,sql-server-2008-r2,Asp.net,Linq To Sql,Jquery Ui,Data Access Layer,Sql Server 2008 R2,我正在一个大型项目中工作,在这个项目中,我必须为用户提供将数据输入表单的有效方法 该表单的三个字段需要来自公共数据源(SQL表)子集的值。我使用JQuery和jQueryUI构建了一个自动完成,它发布到一个通用的HttpHandler 在内部,处理程序使用LINQtoSQL从特定表中获取所需的数据。该表有大约10个不同的列,linq表达式使用SqlMethods.Like()匹配这10个字段中每个字段的单个搜索项 问题是该表包含大约20K行。autocomplete工作完美无瑕,在显示之前大约6

我正在一个大型项目中工作,在这个项目中,我必须为用户提供将数据输入表单的有效方法

该表单的三个字段需要来自公共数据源(SQL表)子集的值。我使用JQuery和jQueryUI构建了一个自动完成,它发布到一个通用的HttpHandler

在内部,处理程序使用LINQtoSQL从特定表中获取所需的数据。该表有大约10个不同的列,linq表达式使用SqlMethods.Like()匹配这10个字段中每个字段的单个搜索项

问题是该表包含大约20K行。autocomplete工作完美无瑕,在显示之前大约6秒左右(在我的本地机器上调试时),接受大量数据

JqueryUI自动完成有0个延迟,按3键查询,并且帖子的结果在Facebook风格的多行可选选项中生成。(我几乎不得不重写自动完成插件…)

所以问题是数据和速度。有没有关于如何加快速度的想法?我仅有的两个想法是缓存数据(如何/在哪里?);或者直接使用sql数据读取器进行数据访问

任何想法都将不胜感激! 谢谢


我只考虑使用
.Take(10)
linq方法返回前X行数。这应该转化为senbilesql调用,这将大大减少数据库的负载。随着用户的输入,他们会发现越来越少的匹配项,因此他们只会看到他们需要的数据

我通常认为10个条目就足以让用户理解正在发生的事情,并且仍然能够快速获得所需的数据(参见amazon.com搜索栏中的示例)


显然,如果你能以一种有意义的方式对数据进行排序,那么10个结果将更有可能让用户很快得到他们想要的结果。

返回前N个结果肯定是个好主意。我们发现(查询一个270K的潜在列表)返回前30名对于用户查找他们要查找的内容是一个更好的选择,但这完全取决于您查询的数据


另外,你真的应该把延迟降低到100-300毫秒。当你将延迟设置为零时,一旦你触发了3个字符的触发器,实际上每一次都是如此。单身。钥匙(打、击等的)一下将作为新查询发送到服务器。这很容易产生意外和不受欢迎的效果,使响应速度进一步减慢。

自动完成的极好方法我看起来像这个解决方案,谢谢
<bleepzter/>