J'ai cette requête qui est exécutée via Linq to Entities. La première fois que la requête s'exécute, elle génère le plan d'exécution qui prend un peu moins de 2 minutes. Une fois le plan mis en cache, la requête prend 1 ou 2 secondes. Le problème que j'ai est que le plan ne cesse de se reconstruire toutes les quelques heures et je ne suis pas sûr de savoir pourquoi.Reconstruction du plan d'exécution de requête SQL Server
Ceci est la requête linq que nous utilisons, je sais que cela semble fou, mais pour ce dont nous avons besoin c'était notre seule option.
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;
Je ne veux pas coller le t-sql généré ici car il est assez grand. Si quelqu'un a des idées, n'hésitez pas à contribuer.
Merci.
Vous avez raison. Ça a l'air fou. Vous avez réellement besoin de tous les champs de chaque entité que vous incluez * et * vous avez l'intention de mettre à jour chaque instance * et * vous avez profilé et constaté que c'est plus rapide que le chargement individuel de la demande? C'est le seul argument raisonnable que je peux penser pour faire cela au lieu de projeter (mon premier choix pour les cas d'utilisation en lecture seule) ou de se lancer dans de plus petites requêtes. –