Значение Take(100)
переводится как «Выбрать 100» и т. Д. Это помогло бы, если бы ваша проблема заключалась в огромном наборе результатов, где возвращалось много столбцов. Могу поспорить, что ваша проблема - сканирование таблицы в результате запроса. В этом случае .Take(100)
может совсем не помочь.
Итак, вероятный виновник такой же, как если бы вы делали SQL с использованием ADO.NET: Как ваши индексы ? Поля, в которых ведется поиск, не имеют хороших индексов? Это может привести к резкому снижению производительности по сравнению с запросами, в которых do используют хорошие индексы. Добавьте индекс, который включает Code
и Name
и посмотрите, что произойдет. Если вы не используете индекс для Code
, это гарантированно из-за Order By
. Кроме того, какие поля связывают Genealogy_Accounts и Genealogy_AccountClass ? Отсутствие указателя на любом столе может помешать. (Я думаю, индекс, включающий Searchable вряд ли поможет.)
Используйте SQL Profiler , чтобы увидеть фактический выполняемый запрос (хотя вы можете сделать это и в VS) и посмотреть, насколько он действительно плох на сервере.
Проблема может заключаться в том, что LINQ делает какую-то глупость при создании запроса, но, вероятно, это не так. Мы находим, что LINQ-to-SQL часто делает лучшие запросы, чем мы. Даже если это выглядит глупо, обычно это очень эффективно . Вы можете поместить SQL в Query Analyzer и проверить план запроса. Затем перепишите SQL, чтобы сделать его более простым для людей, и посмотрите, улучшит ли он что-то - я уверен, что этого не произойдет. Я думаю, вы все равно увидите сканирование таблицы , указывающее, что с вашим индексом что-то не так.