@saneok44

MS SQL, почему медленно выполняется запрос когда передаю много параметров?

Суть проблемы, есть запрос к одной таблице, из этой таблицы вытягиваю разные данные и выпрямляю их через inner. Чтобы вытащить эти разные данные передаю больше 10+ параметров отбора. Все проиндексировано и установленные ключи. Когда я проверяю запрос в редакторе MSSQL он выполняется до 2 сек. Когда переношу запрос в C# и передаю параметры через SQLCommand.Parameters.add(); запрос выполняется до 27 сек. Если я уберу параметры и запишу их в текстовке к запросу в шапке перед выборкой declare @param1 int = ... запрос выполняется так же быстро как и в MSSQL. Наверное некоторые скажут у тебя закешился неправильный план запроса, нет, все это я чистил и даже на тестовом сервере делал перезагрузку. Пришел к выводу что черезмерное большое количество переданных параметров через SQLCommand.Parameters.add(); душит запрос, нежели я эти параметры захардю в шапке текстовки запроса. Привести пример не смогу так как запрос очень большой в sql текстовке, а на C# сейчас крутится именно вторая версия запроса где параметры забиты в текстовке sql в шапке перед отбором. На счет инъекций все пучком, пользовательского ввода в запросе нет.
Хотелось бы услышать ваши рассуждения почему через C# когда передаю все эти параметры через SQLCommand.Parameters.add() запрос начинает душится, е если я эти параметры встрою в шапке команды declare @param1 int = ... перед selec, то запрос выполняется быстро.
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 2
@firstmixon
command.Parameters.AddWithValue("@name_param", value_param);
Ответ написан
NikFaraday
@NikFaraday
Student full-stack Developer
Вероятнее всего проблема может быть связанна с данными, которые передаются. Если вы передаёте сам запрос на выполнение в БД, вам нужен другой вариант. Если вы утверждаете, что запрос в БД выполняется 2 секунды, а через C# 27, выход - используйте stored procedure
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы