【问题标题】:Recommended approach to paginate 200 stored procedures using on ASP.NET MVC and SQL Server 2014使用 ASP.NET MVC 和 SQL Server 2014 对 200 个存储过程进行分页的推荐方法
【发布时间】:2015-12-18 23:49:44
【问题描述】:

我正在开发一个网站,其中包含多个报告,记录范围广泛,从几条到几千条不等。

这些报告是用存储过程编写的。为了避免将@pagenumber@pagecount@columfilter@columorder 等添加到存储过程中,并且因为我通过 JSON 将数据接收到网络,这就是我正在做的事情:

  1. 用户通过 AJAX 请求报表的第一页
  2. 网络服务器执行存储过程
  3. 网络服务器将结果复制到 MongoDB 集合中
  4. 网络服务器返回 MongoDB 集合,包括帐户页面、页面长度、列过滤器、订单等
  5. 在以下请求中,我直接从 MongoDB 快速获取数据

该方法适用于少量数据行,但对于数千行,第 2 步和第 3 步开始延迟。

知道如何改进分页/排序/过滤以不干扰每个 SP 内部的查询吗?有办法做到这一点吗?

谢谢!

【问题讨论】:

    标签: sql-server asp.net-mvc stored-procedures pagination sql-server-2014


    【解决方案1】:

    我的第一个问题是为什么使用 MongoDB 来存储结果而不是全局存储在 asp.net 的内存中?

    第二个问题是结果是否被缓存(例如,在 MongoDB 中)多久才会过时并且您想要刷新/重新查询它们?

    我不知道您设置的所有详细信息,但简短的回答是您的开销似乎在于查询和/或将(完整)结果返回给应用程序。克服这个问题的唯一方法是让您的查询更有效率或减少发回的数据(如果有很多结果,网络速度可能是一个问题)。最简单的方法是做艰苦的工作并为您的存储过程添加分页。

    所以...

    1) 考虑是否可以在结果的内存缓存中使用,它可能对第 3 步和第 4 步有所帮助。

    2) 对查询进行计时,看看问题是查询需要多长时间还是返回大量数据。如果它是一个慢查询,你可以让查询更快(优化、添加索引等),如果它有很多数据,你可能想要分页(尽管删除列在这里也有帮助)。

    3) 也许只是您的一些存储过程有很多结果或速度很慢。您可以向这些而不是其他的添加分页吗?

    4) 如果这些对您没有帮助,您可能需要努力工作并向存储过程添加分页。

    【讨论】:

    • 感谢您的宝贵时间,我不知道我可以使用 ASP.NET 进行内存缓存,我将阅读相关内容。结果被缓存,直到刷新页面,或者 2 小时后 Mongo 过期自动删除它。该网站用户很少,是一个企业数据仓库网站。
    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 2015-06-14
    • 1970-01-01
    • 2019-02-10
    • 2021-11-10
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多