#sql #sql-execution-plan
#sql #sql-execution-plan
Вопрос:
Я понимаю, что планы запросов для параметризованных запросов кэшируются, но на каком уровне? Если я разорву свое соединение, это приведет к удалению плана запроса? Если я использовал другой объект command, это отбрасывает план запроса?
Короче говоря, какой объект мне нужно кэшировать в моем приложении (если таковой имеется), чтобы сохранить план запроса?
Ответ №1:
Планы запросов кэшируются самим SQL Server и могут быть повторно использованы для нескольких разных подключений.
В MS SQL Server и запрос, и сигнатура параметра хэшируются в расположенные кэшированные планы.
Это может быть важно для параметров переменной длины; если вы не укажете размер, например, параметра VARCHAR, он будет выбран за вас — на основе фактической длины предоставленного параметра. Это означает разные сигнатуры параметров, где длины параметров различаются. Вместо этого следует указать длину параметра VARCHAR, гарантируя ту же сигнатуру параметра и разрешая переработку плана.
Вашему клиентскому коду не нужно ничего активно делать, чтобы это вступило в силу.