Связывание записей по иностранным медленным в запросе LINQ - PullRequest
0 голосов
/ 02 ноября 2011

Я испытываю чрезвычайно медленное выполнение запроса при связывании записей по внешним ключам.Например, у меня есть класс «GraphPoint», который содержит пары DateTime / double.Этот запрос выполняется менее чем за секунду для 150000 записей (фиктивное число для значения):

var data = from x in dataContext.Table1
           select(new GraphPoint(x.Time, 100));

List<GraphPoint> graphPoints = new List<GraphPoint>(data);

Когда я пытаюсь связать вторую таблицу с внешним ключом, выполнение замедляется до сканирования.Через час я отказался от этого запроса:

var data = from x in dataContext.Table1
           select(new GraphPoint(x.Time, x.Table2.First().Value));

List<GraphPoint> graphPoints = new List<GraphPoint>(data);

Почему он такой медленный по сравнению с первым?

Я пытался использовать предварительно скомпилированный запрос, но это не помоглолибо.

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Используйте свойство DataContext.Log , чтобы увидеть точный генерируемый SQL, а затем выясните, есть ли что-нибудь, что вы можете сделать в конце базы данных для оптимизации производительности запроса (например, добавление индексов).

0 голосов
/ 02 ноября 2011

Загрузка второй таблицы с таблицей1 может улучшить производительность,

Попробуйте

DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Table1>(x => x.Table2);
dataContext.LoadOptions = dlo;

Linq переводит его в динамический sql и получает каждую запись для связанной записи таблицы в table1 динамически, что замедляет производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...