Из моих ограниченных знаний о том, как планы запросов компилируются, хранятся и извлекаются запросами, я понимаю, что запрос с несколькими утверждениями или хранимая процедура будет генерировать свой план запроса, который будет храниться в кэше плана запросов, который будет использоваться запросом в будущих выполнениях.
Я думаю, что этот план извлекается из кэша плана запроса с хешем запроса, что означает, что если запрос редактируется и выполняется, хеш отличается, и генерируется новый план, так как в кэше плана запроса не найдено подходящего хэша.
Мой вопрос: если пользователь выполняет оператор, который является одним из операторов в запросе с несколькими операторами, может ли он использовать эту релевантную часть плана запроса, уже находящуюся в кэше, для запроса с несколькими операторами? Я ожидаю, что ответ будет отрицательным, потому что значения хеш-функции, очевидно, не будут совпадать, но лучше ли будет хэшировать каждый оператор в запросе с несколькими операторами, чтобы они могли использоваться пользователями, выполняющими отдельные операторы из запроса?
Я ожидаю, что есть сложности, которые я не принимаю во внимание (и это те, о которых я действительно хочу знать), но кажется, что мы могли бы хранить один и тот же «план утверждений» во многих планах запросов, занимая больше места и занимая больше Процессор и время для генерации.
Может быть, просто показывая мое невежество, хотя.
dbid
и то, иobjectid
другоеis_cache_key=1
так, что вы не сможете повторно использовать планы между различными скомпилированными объектами.