【问题标题】:Is it faster to query a List<T> or database?查询 List<T> 或数据库是否更快?
【发布时间】:2012-05-15 01:53:57
【问题描述】:

我最近遇到了几种需要来自同一个表的不同数据的情况。一个例子是,我将遍历每个“交付驱动程序”,并为每个要交付给他们的客户生成一个可打印的 PDF 文件。

在这种情况下,我把所有的客户都拉出来并存储到

List<Customer> AllCustomersList = customers.GetAllCustomers();

当我遍历送货司机时,我会做这样的事情:

List<Customer> DeliveryCustomers = AllCustomersList.Where(a => a.DeliveryDriverID == DriverID);

我的问题:我通过查询 List 对象的方式是否比每次都在数据库中查询与送货司机相关的客户记录更快?

【问题讨论】:

  • 我无法想象一种从数据库中提取数据会比在内存中执行所有操作更好的方法,就像您目前正在做的那样......我唯一能想到的就是确保您没有提取更多数据然后您将使用...
  • 查询列表应该快得多,因为它会存储在内存中。
  • 什么时候数据太多放不进去需要用到数据库?
  • @xbonez。那不是真的。 DB是为过滤而构建的,有大量数据,你使用DB,而不是在内存中。
  • @xbonez - 虽然您适合较小的数据集,但对于非常大的数据集(可能是 10 或 100 数千,可能是数百万,可能更多),数据库变得更加高效,主要是因为索引和内存中数据集的组织。当然,如果数据库可以将整个数据集保存在内存中,它会比磁盘更有效。

标签: c# asp.net database performance linq


【解决方案1】:

没有准确的行数,如果你传递它,你应该在内存中查询数据库List&lt;T&gt;

但经验法则是,DB 旨在处理大量数据,并且它们具有优化“机制”,而在内存中则没有这样的东西。

因此,您需要对其进行基准测试,以查看对于那么多行每次对您很重要

,到 DB 的往返行程是否值得

“我们应该忘记小的效率,比如大约 97% 的时间:为时过早 优化是万恶之源"

【讨论】:

    【解决方案2】:

    避免往返数据库是有关数据库性能调整的主要规则之一,尤其是当数据库位于网络上并且有多个用户访问它时。

    从另一个角度来看,将大型结果集像您的客户数据一样放入内存中,效率不高,并且可能不会比在需要时访问数据库更快。

    内存集合避免往返的一个很好的用途是查找不经常更改的表(即客户类别、客户区域等)。这样您就可以避免在您的主要客户选择查询中加入,从而使其更快。

    【讨论】:

      【解决方案3】:

      为什么不使用 Redis ? , 这是一个内存数据库,速度非常快。

      【讨论】:

        猜你喜欢
        • 2014-02-19
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多