Как я могу контролировать сниффинг параметров и / или подсказки запросов в платформе сущностей?
Обновление: я создал предложение по внедрению управления подсказками в будущей версии EF. Иди сюда, чтобы проголосовать за это.
У меня есть проблема, когда один из моих запросов Entity Framework (EF) занимает очень много времени для выполнения в Sql Server, хотя когда я копирую и вставляю сгенерированный TSQL в Sql Server Management Studio (SSMS), он выполняется очень быстро. После некоторого расследования я обнаружил, что у меня возникла проблема с перехватом параметров, и правильный способ ее устранения - вставить один из множества подсказок запроса (OPTIMIZE FOR, RECOMPILE и т. Д.). Как мне вставить эти подсказки в мои EF-запросы?
Связанные с этим вопросы с разных точек зрения находятся здесь, здесь и здесь.
2 ответа
Чтобы применить подсказку к запросу, сгенерированному EF, вы должны использовать руководства плана, более подробную информацию здесь: соединение один к одному Недостаточно быстро в SQL Server
Если вы выполняете хранимые процедуры, вы можете объявить параметры хранимой процедуры внутренне.
Т.е.
CREATE PROCEDURE sp_test
(
@param1 NVARCHAR(10),
@param2 INT
)
AS
DECLARE @internalParam1 NVARCHAR(10)
DECLARE @internalParam2 INT
SET @internalParam1 = @param1
SET @internalParam2 = @param2
-- REST OF YOUR QUERY
GO
Это остановит SQL Server кеширование любых параметров, которые передаются в SP.