2017-06-01 78 views
0

我想从数据库中获取数据,以便在页面上显示。表中有大量的行,所以我使用页面来避免永久滚动。以最快的方式过滤,排序和分页方法

我有搜索单词(没有特定列)的功能,按任意列排序,并且显然改变页面大小和我在哪个页面上。

我可以,理论上,只需要询问数据库中的所有内容(SELECT * FROM myTable),将其发送到我的html视图,并完整处理javascript中的数据。问题是,有太多的数据,使用我的结构(页面控制器调用我的主逻辑,它调用一个调用数据库的webservice)的速度非常慢,有时会等待最多20秒的页面原始负载。加载后,JavaScript通常很快。

或者,我可以使用Linq在控制器中完成大部分工作。我也可以在web服务(这是我的)中工作,仍然在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; 

而具体在什么会利用我所提到的是好还是坏的不同方法的情况?

回答

0

你想要做你的数据服务器选择数据块(pagefull)的工作。这是工作;它知道如何做到最好。

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

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

这将生成确切的SQL告诉数据服务器只返回所需的行。