我最近有几种情况需要来自同一个表的不同数据。一个例子是我将遍历每个“交付驱动程序”并为他们要交付的每个客户生成可打印的PDF文件。
在这种情况下,我拉了所有客户并将它们存入
List<Customer> AllCustomersList = customers.GetAllCustomers();
当我通过交付驱动程序循环时,我会做这样的事情:
List<Customer> DeliveryCustomers = AllCustomersList.Where(a => a.DeliveryDriverID == DriverID);
我的问题:通过查询List对象比每次查询与传递驱动程序相关的客户记录每次查询数据库更快,我是这样做的吗?
没有准确的行数,如果你传递它,你应该在内存中查询数据库 List<T>
但经验法则是,DB设计用于处理大量数据,并且它们具有优化“机制”,而在内存中则没有这样的东西。
因此,您需要对其进行基准测试,以确定对于该行数量而言,DB的往返是否值得 每次对你来说都很重要
“我们应该忘记效率低,大约97%的时间说: 过早
优化是万恶之源“
避免往返DB的往返是有关数据库性能调整的主要规则之一,尤其是当数据库位于网络上并且有多个用户访问它时。
从另一个角度来看,将大型结果集带入内存,就像您的客户数据看起来一样,效率并不高于在需要时前往数据库。
很好地利用内存集合来避免往返是针对您的查找表(即客户类别,客户区域等),这些表格不会经常更改。这样您就可以避免在主要客户选择查询中加入,从而加快查询速度。
为什么不用 Redis的 ? ,它是一个内存数据库,速度非常快。