Я скопировал SQL-запрос, созданный linq, из SQL-профилировщика. Вот что раздражает:
Это префиксы select ..columnNames .. from (select ..columnNames .. from(выберите cNames из поля просмотра) Комментарии: 2 оператора select здесь не нужны.
этот запрос занимает 14 секунд для выполнения
при удалениипоследняя строка, содержащая все параметры, такие как @ p_ linq _0 .., и заполняет значения параметров в условии и выполняет тот же самый динамический запрос, который занимает 1 секунду или меньше. Даже в противном случае этот запрос принимает0 секунд при выполнении из sql studio. Это так хромает linq.
Я мог бы переместить это в сохраненный процесс, но сейчас я боюсь использовать linq
Последальнейшие исследования я обнаружил:
Запрос 1:
exec sp_executesql N'SELECT * from TableView WHERE Id = @Id', N'@Id int', @Id = 1
Запрос 2:
exec sp_executesql N'SELECT * from TableView WHERE Id = 1'
Запрос 1 занимает 12 секунд, Запрос 2 занимает 0 секунд. Это объясняетпочему linq-запрос медленный. Так значит ли это, что я всегда должен использовать stor?Процедуры или я что-то упустил?
Почему Microsoft не может исправить построение запросов Linq, насколько сложно проанализировать эту строку и заменить значения параметров вместо передачи этих параметров в качестве аргументов sp_executesql