У меня есть этот запрос, который выполняется, хотя Linq to Entities. При первом запуске запроса создается план выполнения, который занимает менее 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 здесь, так как он довольно большой. Если у кого есть идеи, пожалуйста, не стесняйтесь вносить свой вклад.
Thank you.
Вы правы. Это выглядит сумасшедшим. Вам действительно нужны все поля каждого объекта, в который вы включаете *, и * вы намерены обновлять каждый отдельный экземпляр * и *, который вы профилировали, и обнаружили, что это быстрее, чем загрузка индивидуального спроса? Это единственный разумный аргумент, который я могу придумать для этого, вместо того, чтобы проектировать (мой первый выбор для использования только для чтения) или разбить на более мелкие запросы. –