Использование модели данных сущности ADO. NET. Я построил два запроса ниже к таблице, содержащей 1800 записей, в которой чуть более 30 полей дают потрясающие результаты.
// Executes slowly, over 6000 ms
int count = context.viewCustomers.AsNoTracking()
.Where(c => c.Cust_ID == _custID).Count();
// Executes instantly, under 20 ms
int count = context.viewCustomers.AsNoTracking()
.Where(c => c.Cust_ID == 625).Count();
Я вижу из В журнале базы данных, который предоставляет Entity Framework, запросы практически идентичны, за исключением того, что часть фильтра использует параметр. Копирование этого запроса в SSMS и объявление и установка этого параметра приводит к почти мгновенному запросу, поэтому он, похоже, не находится на конце базы данных.
Кто-нибудь сталкивался с этим, который может объяснить, что происходит? Я во власти стороннего элемента управления, который добавляет эту команду к запросу, пытаясь ограничить количество возвращаемых строк, поэтому получение счетчика является обязательным. Это используется для нескольких запросов, поэтому необходимо общее решение c. К сожалению, он не работает так, как рекламируется, кажется, что запрос выполняется только в 5-10 раз дольше, чем если бы я только загрузил весь вид в память. Однако, когда фильтр не используется, он работает как сон.
Использование этих компонентов включает в себя исходный код, поэтому я могу изменить это поведение, но мне нужно рассмотреть, какие подходы можно использовать для обеспечения решения, которое можно использовать повторно.