Aufgrund meiner begrenzten Kenntnisse darüber, wie Abfragepläne von Abfragen kompiliert, gespeichert und abgerufen werden, verstehe ich, dass eine Abfrage mit mehreren Anweisungen oder eine gespeicherte Prozedur ihren Abfrageplan generiert, der im Abfrageplan-Cache gespeichert wird, der von der Abfrage bei zukünftigen Ausführungen verwendet wird.
Ich denke, dieser Plan wird mit dem Abfrage-Hash aus dem Abfrageplan-Cache abgerufen. Wenn die Abfrage bearbeitet und ausgeführt wird, ist der Hash anders und es wird ein neuer Plan generiert, da im Abfrageplan-Cache kein passender Hash gefunden werden kann.
Meine Frage lautet: Wenn ein Benutzer eine Anweisung ausführt, die eine der Anweisungen in der Abfrage mit mehreren Anweisungen ist, kann er dann den relevanten Teil des Abfrageplans verwenden, der sich bereits im Cache für die Abfrage mit mehreren Anweisungen befindet? Ich gehe davon aus, dass die Antwort Nein lautet, da die Hash-Werte offensichtlich nicht übereinstimmen. Wäre es jedoch besser, jede Anweisung in einer Abfrage mit mehreren Anweisungen zu hashen, damit sie von Benutzern verwendet werden können, die einzelne Anweisungen aus der Abfrage ausführen?
Ich gehe davon aus, dass es Komplikationen gibt, die ich nicht berücksichtige (und über diese möchte ich wirklich Bescheid wissen), aber es scheint, als könnten wir denselben "Anweisungsplan" in vielen Abfrageplänen speichern, die mehr Platz beanspruchen und mehr beanspruchen CPU und Zeit zum Generieren.
Könnte aber nur meine Unwissenheit zeigen.
dbid
undobjectid
beide haben,is_cache_key=1
so dass Sie keine Wiederverwendung von Plänen zwischen verschiedenen kompilierten Objekten erhalten.