Параметризованный запрос, создающий много планов - PullRequest
0 голосов
/ 29 августа 2018

У меня есть несколько запросов, которые параметризованы, они все еще создают новый план выполнения каждый раз, я использую SQL Server 2016

Запросы похожи на:

(@P1 varchar(1043),@P2 varchar(6))
UPDATE table 
SET FILEDATA=@P1 
WHERE FILEID=@P2

Этот запрос не использует уже сгенерированный план выполнения из кэша, скорее он создает новый план каждый раз при выполнении

Это изображение показывает план-план, который создает отдельный запрос

1 Ответ

0 голосов
/ 29 августа 2018

В прошлом это случалось со мной, и следующие исправили это для меня:

  • Убедитесь, что весь этот код находится в хранимой процедуре. Даже при использовании params хранимая процедура с большей вероятностью будет использовать тот же план.
  • Я не буду повторять то, что сказал Нисарг Шах в комментариях, поскольку похоже, что вы обращались к ним, но это все очень важные вещи, которые нужно проверить.
  • Это может звучать странно, но максимально квалифицировать код. По моему опыту, гораздо более вероятно найти существующий план, если у него возникают проблемы, если он составлен так:

    (@P1 varchar(1043),@P2 varchar(6))
    UPDATE database.dbo.table 
    SET database.dbo.table.FILEDATA=@P1 
    WHERE database.dbo.FILEID=@P2
    

Обычно я не пишу такие запросы, потому что они кажутся немного сложными для чтения, но в прошлом это работало для меня, когда я получал кучу планов.

...