引言:
学习的动力来源于问题的出现和知识的深入研究。
概述:
延迟加载怎么来理解?延迟加载也称之为懒加载(lazy load),核心原理就是:当真正需要数据的时候,才真正执行数据加载操作。EF是一个与数据库交互的实体框架,对于系统性能提高,延迟加载必不可少。EF延迟加载:使用Lamabda表达式或者Linq从EF实体对象中查询数据时,EF并不只是直接查询数据,而是需要具体数据的时候,才会把数据加载到内存中。
内容:
一 本质:
1 延迟生成SQL语句:生成的SQL语句不确定,拼凑条件一起提交,降低数据库交互次数,提高数据库的吞吐量。例如:常用的分页,先对数据库进行排序,然后按照需求跳过几行数据,再去几行数据,这并不能用简单的where方法来实现。如果不用延迟加载,where、排序、跳过、取出数据方法每次使用时都会提交sql语句到数据库,那么一个分页查询需要访问4次数据库;若使用延迟加载,四个方法相当于四个条件,当四个条件都满足的时候,将整个拼凑好的sql语句一起提交到数据库,这样只访问了一次数据库。
2 按需加载:例如外键属性,用到该外键时,才会查询该外键对应的表。
二 实现方式:
1 延迟生成SQL语句:例如俩个条件Where和取第第一条数据拼凑查询出数据。
(1)首先数据库中相应表中有数据,书写相应查询代码:
(2)执行第一条语句:DbQuery<Order_Info> query = db.Order_Info;并没有查询数据。
(3)执行第二条语句:Order_Info order = query.FirstOrDefault();我们只需要第一条 订单信息。
2 按需加载:
EF使用前:当遇到主外键相互关联的表,当需要从表中的数据时,我们必须通过主表进行查询。如果我们只需要从表数据,那也必须关联到主表,这种操作方法很低效。
EF使用后:我们只需要查询从表的数据即可,直接查询产品表中的数据。
三 优化:
1 EF如果查询过程中,发现重复的时候,会读取自己的缓冲数据,不读取数据库里面的数据。
2 include进行inner join查询:一次性读出来一张表的数据,然后再去遍历查询出来的数据集合,找到我们需要的数据。
总结:
性能的优化也是我们系统开发人员需要考虑的重要因素,数据查询以及处理的效率,也决定我们软件开发的质量。一些必要的性能优越的技术,我们需要掌握。