Автоматически ли кэшируются параметризованные запросы ODBC?

#sql #sql-execution-plan

#sql #sql-execution-plan

Вопрос:

Я понимаю, что планы запросов для параметризованных запросов кэшируются, но на каком уровне? Если я разорву свое соединение, это приведет к удалению плана запроса? Если я использовал другой объект command, это отбрасывает план запроса?

Короче говоря, какой объект мне нужно кэшировать в моем приложении (если таковой имеется), чтобы сохранить план запроса?

Ответ №1:

Планы запросов кэшируются самим SQL Server и могут быть повторно использованы для нескольких разных подключений.

В MS SQL Server и запрос, и сигнатура параметра хэшируются в расположенные кэшированные планы.

Это может быть важно для параметров переменной длины; если вы не укажете размер, например, параметра VARCHAR, он будет выбран за вас — на основе фактической длины предоставленного параметра. Это означает разные сигнатуры параметров, где длины параметров различаются. Вместо этого следует указать длину параметра VARCHAR, гарантируя ту же сигнатуру параметра и разрешая переработку плана.

Вашему клиентскому коду не нужно ничего активно делать, чтобы это вступило в силу.