У меня проблема с запросом linq to sql - с точки зрения производительности.То, что я пытаюсь сделать, это выяснить, соответствуют ли элементы моей коллекции из примерно 500 предметов (в списке) записи в БД.В настоящее время эта операция занимает около 300 секунд!База данных содержит более миллиона строк, и в будущем она будет расти, поэтому столь ранний уровень производительности просто недопустим.Пример ниже:
var query = from item in db.DataTable.Where(x => x.date == suppliedDate)
where inputList.Contains(item.name)
select new { item.name};
Помощь!
edit: Большое спасибо за все ваши предложения!я просто хотел добавить несколько дополнительных наблюдений, поскольку теперь я могу просматривать вывод SQL моего запроса LINQ (см. ниже)
SELECT [t0].[name]
FROM [dw].[DataTable] AS [t0]
WHERE ([t0].[name] IN (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15, @p16, @p17)) AND ([t0].[date] = @p18)
-- @p0: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [Mark]
-- @p1: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [Owen]
-- @p2: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [James]
-- @p3: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [John]
и т. д.
Это делает500 отдельных попаданий на БД?(Как предположил Ян)?и есть ли способ улучшить производительность, не прибегая к хранимым процедурам и не создавая дополнительную таблицу?(оба варианта на самом деле не доступны для меня прямо сейчас).Я попробовал предложение Джеффа, и это увеличило мое время выполнения с 300 до 126 секунд, но это все еще очень много, особенно учитывая, что объединение БД займет не более 10 секунд.
Большое спасибо