我正在开展一个大型项目,我必须为用户提供有效的方式将数据输入表单。
该表单中的三个字段需要来自公共数据源(SQL表)子集的值。我使用JQuery和JQuery UI来构建一个自动完成,它发布到一个通用的HttpHandler。
处理程序在内部使用Linq-to-sql来获取该特定表所需的数据。该表有大约10个不同的列,linq表达式使用SqlMethods.Like()来匹配这10个字段中每个字段的单个搜索词。
问题是该表包含大约20K行。自动完成工作完美无缺,接受大量数据引入删除,在大约6秒左右(在本地计算机上进行调试时)显示。
JqueryUI自动完成具有0个延迟,对3键进行查询,并且帖子的结果是在Facebook风格的多行可选选项中进行的。 (我几乎不得不重写自动完成插件......)。
所以问题是数据与速度。有关如何提高速度的任何想法?我只有两个想法是缓存数据(How / Where?);或使用直接的SQL数据读取器进行数据访问?
任何想法都将不胜感激! 谢谢,
<bleepzter/>
答案 0 :(得分:6)
我会看到只使用.Take(10)
linq方法返回前X行数。这应该转化为一个敏感的SQL调用,这将减少数据库的负载。当用户输入时,他们会发现越来越少的匹配,因此他们只会看到他们需要的数据。
我通常认为10个项目足以让用户了解正在发生的事情,并且仍能快速获取他们需要的数据(请参阅amazon.com搜索栏中的示例)。
显然,如果您能够以有意义的方式对数据进行排序,那么10个结果将更有可能为用户提供快速的结果。
答案 1 :(得分:1)
返回前N名结果肯定是一个好主意。我们发现(查询270K的潜在列表)返回前30名是用户找到他们正在寻找的东西的更好选择,但完全取决于您查询的数据。
另外,你真的应该把延迟降到像100-300毫秒这样的合理范围内。当您将延迟设置为ZERO时,一旦您点击3个字符的触发器,就会有效。单。键。行程。作为新查询发送到您的服务器。这可能很容易产生意外和不受欢迎的影响,甚至更慢地减慢响应。