从SQL Server数据库中获取大量数据的最快方法

时间:2012-11-12 09:44:33

标签: c# asp.net sql sql-server linq

我在数据库中有超过50,000条记录,我必须在我的应用程序中处理(并且这个数字至少增加2000 /天)。

我目前使用的方式是:Linq到数据库中存储过程的实体,它返回一个对象的集合,以便我可以处理它。

但是我注意到它是一个缓慢的,从数据库中获取这么多记录的最有效方法是什么?

我的代码示例:

   items = (from f in db.spItems().OrderByDescending(f => f.date)
                  group f by f.ID into g
                  select g.FirstOrDefault()).Take(9).ToList();
                  join ar in db.anothertable on f.ID equals ar.ID
                  join t in db.thirdtable on ar.tid equals t.ID

spItems是一个获取结果的存储过程,但有时候我必须对它进行多次连接

3 个答案:

答案 0 :(得分:5)

我会先尝试优化您的查询。 SSMS的速度慢吗?你使用适当的指数吗?你需要所有专栏吗?最重要的是:您是否需要显示所有50000行?

50000条记录的记录不多,但在Web应用程序中显示所有记录并不常见,因为这意味着您必须为所有记录生成HTML并将其显示在客户端的浏览器中(甚至可能使用ViewState)。所以我建议使用数据库分页(例如,通过ROW_NUMBER函数)来对结果集进行分区,并仅查询要显示的数据(例如,GridView中每页100行)。

Efficiently Paging Through Large Amounts of Data

答案 1 :(得分:3)

请考虑以下步骤。对于这类问题,我们需要在多个层面上工作。

1.使用ADO.net的标准方式获取结果。因为LINQ to SQL最终是一个ORM(附加层)所以显然它会降低性能,就像你的情况一样明显。 see here

<强> 2。如果您没有错过添加索引,选择错误数据类型等任何内容,请再次查看您的表格设计。

第3。提高存储过程的性能see here

<强> 4。划分您的数据。:如果您的旧数据是只读的(或不再使用),则将其移动到其他表中,因为您告诉每天添加最少的新2000行。所以你的桌子大小会显着减少。 请非常仔细地决定此决定。

答案 2 :(得分:0)