Когда выполняется запрос, SQL Server проверит, существует ли план выполнения для этого запроса в кэше плана выполнения.Если он найдет один, он может повторно использовать этот план выполнения.Если он не находит его в кеше, он генерирует план, помещает в кеш готовый к последующим вызовам для повторного использования, а затем выполняет запрос.Таким образом, это происходит во время выполнения запроса.
Как долго план остается в кэше, зависит от ряда факторов, в том числе:- как часто этот план используется- Какую «ценность» предлагает этот план- нехватка памяти на сервере
Таким образом, данный запрос может иметь план выполнения, сгенерированный несколько раз в течение определенного периода, если он не может оставаться в кэше.Кроме того, при перезапуске SQL Server кэш очищается.
Есть хорошая статья MSDN по Кэширование и повторное использование плана выполнения