D'après ma connaissance limitée de la façon dont les plans de requête sont compilés, stockés et récupérés par les requêtes, je comprends qu'une requête à instructions multiples ou une procédure stockée générera son plan de requête qui sera stocké dans le cache du plan de requête pour être utilisé par la requête lors d'exécutions futures.
Je pense que ce plan est récupéré du cache du plan de requête avec le hachage de requête, ce qui signifie que si la requête est modifiée et exécutée, le hachage est différent et un nouveau plan est généré car aucun hachage correspondant ne peut être trouvé dans le cache du plan de requête.
Ma question est la suivante: si un utilisateur exécute une instruction qui est l'une des instructions de la requête à instructions multiples, peut-il utiliser la partie pertinente du plan de requête déjà dans le cache pour la requête à instructions multiples? Je suppose que la réponse est non car les valeurs de hachage ne correspondront évidemment pas, mais serait-il préférable de hacher chaque instruction dans une requête multi-instructions afin qu'elles puissent être utilisées par les utilisateurs exécutant des instructions individuelles à partir de la requête?
Je pense qu'il y a des complications que je ne prends pas en compte (et ce sont celles-ci que je veux vraiment savoir), mais il semble que nous pourrions stocker le même `` plan de déclaration '' dans de nombreux plans de requête prenant plus d'espace et prenant plus CPU et temps pour générer.
Cela pourrait simplement montrer mon ignorance.
dbid
et lesobjectid
deux l'ontis_cache_key=1
pour que vous n'obtiendrez aucune réutilisation des plans entre les différents objets compilés.