Dalla mia limitata conoscenza di come i piani di query vengono compilati, archiviati e recuperati dalle query, capisco che una query multiistruzione o una procedura memorizzata genererà il suo piano di query che verrà archiviato nella cache del piano di query per essere utilizzato dalla query in future esecuzioni.
Penso che questo piano venga recuperato dalla cache del piano di query con l'hash della query, il che significa che se la query viene modificata ed eseguita, l'hash è diverso e viene generato un nuovo piano poiché non è possibile trovare hash corrispondenti nella cache del piano di query.
La mia domanda è: se un utente esegue un'istruzione che è una delle istruzioni nella query con più istruzioni, può utilizzare quella parte rilevante del piano di query già nella cache per la query con più istruzioni? Mi aspetto che la risposta sia no perché i valori di hash ovviamente non corrisponderanno, ma sarebbe meglio eseguire l'hashing di ogni istruzione in una query multiistruzione in modo che possano essere utilizzati dagli utenti che eseguono singole istruzioni dalla query?
Mi aspetto che ci siano complicazioni che non sto prendendo in considerazione (ed è queste che voglio davvero conoscere), ma sembra che potremmo memorizzare lo stesso "piano di istruzioni" in molti piani di query occupando più spazio e occupando di più CPU e tempo per generare.
Potrebbe solo mostrare la mia ignoranza però.
dbid
edobjectid
entrambi hannois_cache_key=1
quindi non otterrai alcun riutilizzo dei piani tra diversi oggetti compilati.