Z mojej ograniczonej wiedzy o tym, jak plany kwerend są kompilowane, przechowywane i pobierane przez zapytania, rozumiem, że zapytanie składające się z wielu instrukcji lub procedura składowana wygeneruje swój plan zapytań, który będzie przechowywany w pamięci podręcznej planu zapytań do wykorzystania przez zapytanie w przyszłych wykonaniach.
Myślę, że ten plan jest pobierany z pamięci podręcznej planu zapytań za pomocą skrótu zapytania, co oznacza, że jeśli zapytanie jest edytowane i wykonywane, skrót jest inny i generowany jest nowy plan, ponieważ w pamięci podręcznej planu zapytania nie można znaleźć pasującego skrótu.
Moje pytanie brzmi: jeśli użytkownik wykonuje instrukcję, która jest jedną z instrukcji w zapytaniu zawierającym wiele instrukcji, czy może użyć tej odpowiedniej części planu zapytań, która znajduje się już w pamięci podręcznej dla zapytania zawierającego wiele instrukcji? Oczekuję, że odpowiedź brzmi „nie”, ponieważ wartości skrótu oczywiście nie będą pasować, ale czy lepiej byłoby mieszać każdą instrukcję w zapytaniu złożonym z wielu instrukcji, aby mogły być używane przez użytkowników uruchamiających poszczególne instrukcje z zapytania?
Oczekuję, że są komplikacje, których nie biorę pod uwagę (i to o nich naprawdę chcę wiedzieć), ale wydaje się, że moglibyśmy przechowywać ten sam „plan zestawień” w wielu planach zapytań, zajmujących więcej miejsca i zajmujących więcej Procesor i czas do wygenerowania.
Może po prostu pokazywał moją ignorancję.
dbid
iobjectid
oba mają,is_cache_key=1
więc nie będziesz mógł ponownie wykorzystać planów między różnymi skompilowanymi obiektami.