2

我的数据库中有超过 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 是一个获取结果的存储过程,但有时我必须对其进行多次连接

4

3 回答 3

5

我会首先尝试优化您的查询。SSMS 速度慢吗?你使用正确的索引吗?你需要所有的列。最重要的是:您是否需要显示所有 50000 行?

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

高效地对大量数据进行分页

于 2012-11-12T09:55:07.093 回答
4

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

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

2.如果您没有错过任何事情,例如添加索引、选择错误的数据类型等,请再次检查您的表格设计。

3. 提高存储过程性能见这里

4. 划分您的数据。:将旧数据移至其他表,如果它是只读的(或不再使用),因为您告诉我们每天至少添加 2000 行。所以你的桌子大小会显着减少。请非常谨慎地决定这个决定。

于 2013-10-07T15:42:04.970 回答
0

将本文视为对先前答案的有价值的补充:http: //blogs.msdn.com/b/wriju/archive/2010/06/09/ado-net-entity-framework-4-0-loading-data- in-4-ways.aspx

于 2013-10-07T15:50:49.940 回答