我正在开发一个大型项目,我必须为用户提供将数据输入表单的有效方法。
该表单的三个字段需要来自公共(public)数据源(SQL 表)子集的值。我使用 JQuery 和 JQuery UI 构建了一个自动完成功能,它将发布到通用 HttpHandler。
处理程序在内部使用 Linq-to-sql 从该特定表中获取所需的数据。该表大约有 10 个不同的列,linq 表达式使用 SqlMethods.Like() 来匹配这 10 个字段中每个字段的单个搜索词。
问题是该表包含大约 20K 行。自动完成工作完美无缺,接受大量数据会带来延迟,在大约 6 秒左右(在我的本地计算机上调试时)才会显示。
JqueryUI 自动完成具有 0 延迟,对 3 键进行查询,并且帖子的结果以 Facebook 风格的多行 optional 进行。 (我几乎不得不重写自动完成插件......)。
所以问题是数据与速度。关于如何加快速度有什么想法吗?我唯一的两个想法是缓存数据(如何/在哪里?);或者使用直接的 sql 数据读取器进行数据访问?
任何想法将不胜感激! 谢谢,
<bleepzter/>
最佳答案
我会考虑使用 .Take(10)
linq 方法仅返回前 X 行。这应该转化为 sensbile sql 调用,这将大大减少数据库的负载。随着用户输入,他们会发现越来越少的匹配项,因此他们只会看到他们需要的数据。
我通常认为 10 个项目足以让用户了解正在发生的事情,并且仍然可以快速获取他们需要的数据(请参阅 amazon.com 搜索栏以获取示例)。
显然,如果您能够以有意义的方式对数据进行排序,那么这 10 个结果将更有可能快速为用户提供他们想要的内容。
关于asp.net - 大数据集的自动完成优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4628064/