16

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

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

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

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

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

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

4

3 回答 3

15

没有准确的行数,如果你通过它,你应该在内存中查询数据库List<T>

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

因此,您需要对其进行基准测试,以查看每次对您很重要时,对于该数量的行,到 DB 的往返是否值得

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

于 2012-05-06T00:52:03.327 回答
1

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

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

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

于 2012-05-06T04:26:00.070 回答
1

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

于 2016-10-28T07:36:12.220 回答