我有这个查询通过Linq执行到实体。第一次运行查询时,它会生成执行计划,只需不到2分钟。计划缓存后,查询需要1或2秒钟。我遇到的问题是该计划每隔几个小时就会不断重建,我不确定为什么会这样。SQL Server查询执行计划重建
这是我们正在使用的linq查询,我知道它看起来很疯狂,但对于我们需要的是我们唯一的选择。
var data = from row in mgr.ServiceDesk_RequestEvent
.Include("ServiceDesk_Event")
.Include("ServiceDesk_Event.ServiceDesk_SLAEventRule")
.Include("ServiceDesk_Event.ServiceDesk_SLAEventRule.ServiceDesk_RuleSet")
.Include("ServiceDesk_Event.ServiceDesk_SLAEventRule.ServiceDesk_RuleSet.ServiceDesk_Rule")
.Include("ServiceDesk_Event.ServiceDesk_SLAEventRule.ServiceDesk_RuleSet.ServiceDesk_Rule.ServiceDesk_RuleOperator")
.Include("ServiceDesk_Event.ServiceDesk_SLAEventRule.ServiceDesk_RuleSet.ServiceDesk_Rule.ServiceDesk_RuleConstraintField")
.Include("ServiceDesk_Event.ServiceDesk_SLAEventRule.ServiceDesk_RuleSet.ServiceDesk_Rule.ServiceDesk_RuleConstraintValue")
.Include("ServiceDesk_Event.ServiceDesk_SLAEventRule.ServiceDesk_RuleSet.ServiceDesk_Action")
.Include("ServiceDesk_Request")
.Include("ServiceDesk_Request.People_User")
.Include("ServiceDesk_Request.ServiceDesk_RequestCategory")
.Include("ServiceDesk_Request.ServiceDesk_RequestCategory.ServiceDesk_SLA")
.Include("ServiceDesk_Request.ServiceDesk_RequestRole_Groups")
.Include("ServiceDesk_Request.ServiceDesk_RequestRole_Groups.Security_Role.Security_UserRoles")
.Include("ServiceDesk_Request.ServiceDesk_RequestRole_Groups.Security_Role.Security_UserRoles.Security_User")
.Include("ServiceDesk_Request.ServiceDesk_RequestPriority")
.Include("ServiceDesk_Request.Offices_User")
.Include("ServiceDesk_Request.ServiceDesk_RequestTechnicians")
.Include("ServiceDesk_Request.ServiceDesk_RequestTechnicians.People")
where row.Completed == false && row.Deleted == false
select row;
我不想在这里粘贴生成的t-sql,因为它相当大。如果有人有想法,请随时提供意见。
谢谢。
你说得对。它看起来很疯狂。实际上,您需要每个实体的每个字段,包括*和*您打算更新每个实例*和*您已经分析并发现这比单个需求加载更快?这是我可以想到的唯一合理的论点,而不是投影(我的第一选择只读用例)或闯入较小的查询。 – 2009-11-23 20:01:54