【问题标题】:Fastest way to fetch huge amount of data from SQL Server database从 SQL Server 数据库中获取大量数据的最快方法
【发布时间】:2012-11-12 09:44:32
【问题描述】:

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

【问题讨论】:

  • 这取决于您如何使用数据。你需要所有的数据吗?还是只显示部分数据?请提供更多上下文。
  • 多线程在这里不起作用,因为一旦其中一个线程访问数据库,其他线程就会阻塞。
  • 如下 mnetioned,我只得到大约 20 条记录,但会进行多次连接,我会放一个我的代码示例
  • @AliIssa:我对 Linq-To-Sql 不熟悉,但是为什么在查询中使用 ToList()

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


【解决方案1】:

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

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

Efficiently Paging Through Large Amounts of Data

【讨论】:

  • 我只得到大约 20 条记录,但会进行多次连接,我会放一个我的代码示例
【解决方案2】:

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

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

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

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

4.划分您的数据。:如果您的旧数据是只读的(或不再使用),则将其移至其他表,因为您告诉我们每天至少添加 2000 行新数据。因此,您的表格大小将显着减小。 请慎重决定。

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多