【问题标题】:fastest way to Filter, Order and split in pages method过滤、排序和拆分页面方法的最快方法
【发布时间】:2017-06-01 15:34:13
【问题描述】:

我想从数据库中获取数据,以显示在页面上。表中有大量行,所以我使用页面来避免永远滚动。

我有搜索字词(没有特定列)、按任何列排序、显然可以更改页面大小和我所在的页面的功能。

理论上,我可以只向数据库询问所有内容(SELECT * FROM myTable),将其发送到我的 html 视图,然后完全在 javascript 中处理数据。问题是,有这么多的数据,使用我的结构(页面控制器调用我的主逻辑,它调用一个 web 服务,它调用数据库)非常慢,有时等待页面的原始加载长达 20 秒。加载后,javascript 通常很快。

或者,我可以使用 Linq 在控制器中完成大部分工作。我也可以在网络服务(它是我的)中完成工作,仍然在 Linq 中。或者,我可以直接使用 WHERE、ORDER BY、COUNT 和一堆动态 SQL 请求,以便立即从数据库中获得我想要的内容。但其中任何一个都会迫使我在每次参数更改时刷新页面。

所以我想知道性能。例如,哪个更快:

var listObjects = ExecuteSQL("SELECT * FROM myTable");
return listObjects.Where(x => x.field == word).OrderBy(x => x.field);

var listObjects = ExecuteSQL("SELECT * FROM myTable WHERE field = :param1 ORDER BY field", word);
return listObjects;

在哪些特定情况下使用我提到的不同方法会更好或更差?

【问题讨论】:

    标签: javascript c# sql linq


    【解决方案1】:

    没有。

    您想要在您的 dataserver 上选择一个 data 块(整页)。这就是它的工作;它知道如何做到最好。

    所以,忘记ExecuteSQL。你几乎关闭了一切帮助你的能力。试试 LINQ:

      var page = (from m in MyTable
                  where m.field == param1
                 orderby m.field
                 select m)
                 .Skip((nPage-1)*pageLength).Take(pageLength);
    

    这将生成准确的 SQL 来告诉数据服务器只返回您想要的行。

    【讨论】:

      猜你喜欢
      • 2020-09-08
      • 2016-12-29
      • 2017-07-18
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      相关资源
      最近更新 更多