在生产环境中返回 28,000 行非常缓慢

28,000 rows being returned very slowly in production environment

我有一个非常简单的 get,它可以从字面上抓取整个数据库集并通过网络 returns 它。有问题的集合目前大约有 28k 行。

在本地测试时,对数据库的调用不到一秒即可完成,但 swagger 调用大约需要一分钟。在我们的生产环境中,完成调用大约需要 1-2 分钟(我们没有精确的数据库调用的计时代码,但我们在前端计时需要多长时间,也是 1-2分钟)。

数据调用和它到达前端之间的某些事情需要很长时间,我不确定如何解决它。

代码字面意思是:

[HttpGet]
public IActionResult GetAllCustomers()
{
    return Ok(_context.Customers);
}

我还能做些什么来调试这个?

我们的工作解决方案将显着限制数据集,返回 < 1000 条记录,但业务偏好是拥有所有内容并让前端 table 对其进行排序和过滤。

还好我从模型中删除了所有相关对象,并将其剥离到 table 中的 10 列左右,但仍然花费了很长时间。

您的问题与ASP.NET或微服务架构无关...

如果数据库中有 28,000 条记录 table 并通过 HTTP 请求所有记录,速度会很慢。

请求速度快的部分原因是所有 28,000 条记录都发送到本地主机,而不是生产环境中的 "over the wire"。在生产中,所有 28,000 条记录都必须通过互联网传输。请求可能是快速本地主机的另一个原因是您的数据库也是 运行 本地主机,因此数据不必传输 "over the wire"。在生产中,即使数据库是内部的,数据可能仍然有一段距离从数据库传输到 API,也可能是 "over the wire",如果您的数据库是 运行,则不会发生这种情况本地主机也是如此。

解决方案是在 API 和前端实现分页:

您提到的要求:"but the business preference is to have everything and let a front-end table sort and filter it."

排序和过滤也是结合分页完成的:

一开始您可能没有意识到,但这是 Web 应用程序最常见的问题之一,它总是通过分页或垂直滚动​​延迟加载网页和 Web 控件来解决。下载所有数据以便前端可以进行分页、排序和过滤并不是解决问题的正确方法。