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