最近做的一个项目,使用的环境是mvc 3,Entity FrameWork,用linq写的查询,
现在遇到这样的问题,两张表,一个左表一条数据,右表有30,000数据,现在进行左表左连接右表,访问时间如下:
innner join : 00:00:00.3831501
left join: 00:00:10.9163434
数据库用的是oracle 10g ,数据访问引擎为:Oracle.DataAccess.Client(官方访问类)
如果用:EFOracleProvider(第三方访问类)
linq 语句如下:
其中T_BASE_PERSON 一条数据,T_PLAN_PLAN 有30,000左右的数据;
var query = (from person in container.T_BASE_PERSON
join plan in container.T_PLAN_PLAN
on new { PERSON_ID = person.PersonId, PERIOD_ID = period.ID, IS_MAIN = (bool?)person.IsMain } equals
new { plan.PERSON_ID, plan.PERIOD_ID, IS_MAIN = plan.IS_MAIN }
into auditList
from list in auditList.DefaultIfEmpty()
select new PersonPlanAuditListEntity()
{
PlanId = list == null ? 0 : list.ID,
PersonId = person.PersonId,
PersonName = person.PersonName,
});
在query.ToList();时耗时间了,不知道什么问题
如果是.ToList()的问题,那不使用.ToList();有么有其他解决方案?
哪位遇到过类似问题,请帮忙解决,谢谢:
这个跟ToList应该没有关系。ToList的时候才真正执行查询,所以时间肯定在这一步。
inner join和Left join属于两种不同的业务场合。本来就不是一样的。
你可以分析它产生的sql语句,看看是否有什么发现
谢谢,现在得出结论了,Net4.0 Linq是有这个bug的,4.5版本已修复此bug
最主要还是看生成的sql语句是什么样子的,只要生成的sql语句没有问题,那么时间长短就是数据库本身的问题了。
楼主请教个问题, 我上次写的linq语句跟你的基本一样,但是生成的sql语句是inner join
你上面的linq生成的也应该是 inner join 吧?
在连接条件很多的情况下,你是用什么办法生成Left Join 的 ?
求指点一下,谢谢