Итак, я пишу запрос Linq, и для его выполнения требуется 16 секунд. Решите посмотреть, каков план запроса, поэтому я перенес его из Linq в SQL Profiler, и выполнение запроса занимает всего 2 секунды. Вздох
Потратив большую часть дня на изучение и, наконец, приступив к использованию SQL Server Profiler, я вижу, что Linq2SQL использует sp_executesql для выполнения запроса. Я понимаю, что это должно улучшить производительность, потому что он с большей вероятностью повторно использует план выполнения ... но, похоже, он выбрал ужасный план выполнения.
Более странной особенностью является то, что она становится медленной, только если я присоединяюсь к определенной таблице, и я понятия не имею, почему эта конкретная таблица вызывает проблему.
РЕДАКТИРОВАТЬ Просто чтобы прояснить актуальную проблему здесь:
На самом деле это зависит от разных запросов. Один, по сути,
SELECT col1, col2, ... FROM table1, table2 WHERE table1.val IN (1234, 2343, 2435)
Другой
EXEC sp_executesql 'SELECT col1, col2, ... FROM table1, table2 WHERE table1.val IN (@p1, @p2, @p3)',
N'@p0 int,@p1 int,@p2 int,@p3 int',
@p0=1234, @p1=2343, @p3=2435