大数据集的自动完成优化

时间:2011-01-07 16:56:36

标签: asp.net linq-to-sql jquery-ui data-access-layer sql-server-2008-r2

我正在开展一个大型项目,我必须为用户提供有效的方式将数据输入表单。

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

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

问题是该表包含大约20K行。自动完成工作完美无缺,接受大量数据引入删除,在大约6秒左右(在本地计算机上进行调试时)显示。

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

所以问题是数据与速度。有关如何提高速度的任何想法?我只有两个想法是缓存数据(How / Where?);或使用直接的SQL数据读取器进行数据访问?

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

<bleepzter/>

2 个答案:

答案 0 :(得分:6)

我会看到只使用.Take(10) linq方法返回前X行数。这应该转化为一个敏感的SQL调用,这将减少数据库的负载。当用户输入时,他们会发现越来越少的匹配,因此他们只会看到他们需要的数据。

我通常认为10个项目足以让用户了解正在发生的事情,并且仍能快速获取他们需要的数据(请参阅amazon.com搜索栏中的示例)。

显然,如果您能够以有意义的方式对数据进行排序,那么10个结果将更有可能为用户提供快速的结果。

答案 1 :(得分:1)

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

另外,你真的应该把延迟降到像100-300毫秒这样的合理范围内。当您将延迟设置为ZERO时,一旦您点击3个字符的触发器,就会有效。单。键。行程。作为新查询发送到您的服务器。这可能很容易产生意外和不受欢迎的影响,甚至更慢地减慢响应。