7

我正在研究一个大型项目,我必须为用户提供一种有效的方式将数据输入到表单中。大型数据集的自动完成优化

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

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

问题是该表包含一些20K行。自动完成工作完美无缺,接受数据量庞大的数据引入了删除,在6秒左右(当我的本地计算机上进行调试时)附近出现之前。

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

所以问题是数据与速度。任何想法如何加快这一点?我唯一的两个想法是缓存数据(How/Where?);或直接使用SQL数据读取器进行数据访问?

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

<bleepzter/> 

回答

6

我想看看只返回使用.Take(10) LINQ方法行的第一个X号。这应该转化为一个敏感的sql调用,这会减少数据库上的负载。随着用户类型的不同,他们会发现越来越少的匹配,所以他们只会看到他们需要的数据。

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

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

+0

谢谢,谢谢,谢谢!它像一个魅力一样工作! – bleepzter 2011-01-07 17:39:46

1

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

另外,你真的应该把延迟降低到100-300毫秒这样的明智之举。当你将延迟设置为零时,一旦你点击了3个字符的触发器,实际上每个都是。单。键。行程。作为新的查询发送到您的服务器。这很容易产生意想不到的不受欢迎的影响,甚至会减慢响应速度。