我在数据库中有超过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是一个获取结果的存储过程,但有时候我必须对它进行多次连接
答案 0 :(得分:5)
我会先尝试优化您的查询。 SSMS的速度慢吗?你使用适当的指数吗?你需要所有专栏吗?最重要的是:您是否需要显示所有50000行?
50000条记录的记录不多,但在Web应用程序中显示所有记录并不常见,因为这意味着您必须为所有记录生成HTML并将其显示在客户端的浏览器中(甚至可能使用ViewState
)。所以我建议使用数据库分页(例如,通过ROW_NUMBER
函数)来对结果集进行分区,并仅查询要显示的数据(例如,GridView
中每页100行)。
答案 1 :(得分:3)
请考虑以下步骤。对于这类问题,我们需要在多个层面上工作。
1.使用ADO.net的标准方式获取结果。因为LINQ to SQL最终是一个ORM(附加层)所以显然它会降低性能,就像你的情况一样明显。 see here
<强> 2。如果您没有错过添加索引,选择错误数据类型等任何内容,请再次查看您的表格设计。
第3。提高存储过程的性能:see here
<强> 4。划分您的数据。:如果您的旧数据是只读的(或不再使用),则将其移动到其他表中,因为您告诉每天添加最少的新2000行。所以你的桌子大小会显着减少。 请非常仔细地决定此决定。
答案 2 :(得分:0)