【问题标题】:Fastest Way to load Large SQL Tables加载大型 SQL 表的最快方法
【发布时间】:2020-12-29 13:52:17
【问题描述】:

我正在制作一个向用户显示数据的 ASP.NET 网站。它查询 sql 数据库以获取该数据,然后将其显示在浏览器中。这些表通常有 100 万多行,并且需要一些时间来加载。而不是用户必须等待那么长时间才能查看页面,我希望页面加载,然后在加载时将数据添加到页面中。我可以使用 SignalR 实现这一点,但我的问题是:

在C#中,有没有办法说“select * from tableName”,但让它逐行返回,这是加载数据的最快方式吗?

【问题讨论】:

  • 我不知道实体框架是否提供了逐行加载数据,但是在浏览器中加载100万+行是相当大的内存负担。我的方法是首先向用户提供分页,比如 10 或 20 条记录。然后在转到下一页或上一页时,您可以过滤掉下一组记录。这样用户体验不会受到影响,您也不需要一次加载整个数据。

标签: c# sql asp.net-mvc


【解决方案1】:

您可以做的一个选项是按页面列出,这有助于加载,

   string searchString

   if (searchString != null)
   {
       page = 1;
   }
   else
   {
       searchString = currentFilter;
   }

   ViewBag.CurrentFilter = searchString;

   int pageSize = 5;
   int pageNumber = (page ?? 1);
   return View(Users.ToPagedList(pageNumber, pageSize)); 

如果您可以减少要加载的数据量,那将是最好的,在我的情况下,我做了一个“选择”以仅加载具有特定值的行

var VAR = db.YourModel.Where(x => x.YourColumn  == YourString/Value).ToList();

【讨论】:

    【解决方案2】:

    完成此操作的最简单方法可能是创建一个通过 Ajax 异步调用的服务器端方法,并将其加载到表中。这样,加载视图的操作不依赖于表加载,并且表记录将在它们进入时加载。 此外,如果数据的变化不是很频繁,请考虑缓存它以使后续页面加载更快。

    【讨论】:

      【解决方案3】:

      SignalR 将适用于这种情况,从 db 加载大型数据集时有两点。

      1. 永远不要使用 *,而是命名您想要的每个列名。
      2. 您可以先获取表中记录的计数,然后根据批量大小进行提取。例如,您在 DB 中有 1000 条记录,批量大小为 100。因此您将向 DB 发出 10 次请求以获取所有 1000 个元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        • 1970-01-01
        • 2021-11-12
        • 1970-01-01
        • 2015-07-15
        • 2011-07-12
        • 2021-09-25
        相关资源
        最近更新 更多