SETUP:
我有一个从大型数据库中提取的存储过程。根据用户选择的参数值,这可能会很快返回结果,或者可能需要几分钟。
如果条件合适,我经常会等待SQL
,或者在渲染结果时出现MAXJSONLENGTH
错误。
我希望SQL
以500条记录的批次返回结果,C#
序列化并传递批次,jQgrid
加载结果,因为它们可用。这将使其感觉更具响应性并避免超时和最大长度错误。
在找不到更多结果之前,进行ajax调用以获得更多结果非常简单,但我必须确保在后续请求中没有获得任何先前提供的结果。
在另一个区域,我将记录ID返回到存储过程以排除结果。在这种情况下,结果中没有太多记录,但搜索通常需要很长时间。在处理这么多记录时,我不认为这种方法是个好主意,但我不确定如何做到这一点。
结果没有订购,因此再次运行程序并不能保证在开始时获得相同的500条记录。
你会推荐什么?或者,我是否过度思考这个? (我不是要求你对它进行编码 - 但如果你有一个例子就不会抱怨。我只是需要有关如何解决这个问题的新想法。)
答案 0 :(得分:0)
根据您的问题,我推断有一些请求会返回大量行,导致最大长度为json错误或超时错误。
我建议你使用分页并让你的查询只返回一组有限的行。您可以通过在SQL Server中使用ROW_NUMBER()函数,然后在WHERE子句中添加过滤条件来实现此目的:
WHERE RowNum BETWEEN @PageNumber * @PageSize AND (@PageNumber + 1) * @PageSize
对于排序,您可以添加ORDER BY子句,并且可以考虑添加聚簇索引,以防您在该表上的几乎所有查询中都期望此顺序。