最快的筛选,排序和分页方法

时间:2017-06-01 15:34:14

标签: javascript c# sql linq

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

我有搜索单词的功能(没有特定列),按任何列排序,显然会更改页面大小以及我所在的页面。

理论上,我可以向数据库询问所有内容(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;

在具体的情况下,使用我提到的不同方法会更好还是更差?

1 个答案:

答案 0 :(得分:1)

没有

您希望在 dataserver 上选择数据的块(pagefull)。这是它的工作;它知道如何做到最好。

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

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

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