Wie bereits gesagt wurde, sollten Sie nicht einfach die WITH RECOMPILE
in jedem gespeicherten Proc aus Gewohnheit. Damit würden Sie einen der Hauptvorteile von Stored Procedures eliminieren: die Tatsache, dass der Abfrageplan gespeichert wird.
Warum ist das möglicherweise eine große Sache? Die Berechnung eines Abfrageplans ist viel intensiver als die Kompilierung von normalem prozeduralem Code. Denn die Syntax einer SQL-Anweisung gibt nur an was Sie wollen, und nicht (im Allgemeinen) wie Das ermöglicht der Datenbank ein hohes Maß an Flexibilität bei der Erstellung des physischen Plans (d. h. der Schritt-für-Schritt-Anweisungen für die tatsächliche Erfassung und Änderung von Daten). Es gibt viele "Tricks", die der Präprozessor für Datenbankabfragen anwenden und Entscheidungen treffen kann - in welcher Reihenfolge die Tabellen verbunden werden sollen, welche Indizes verwendet werden sollen, ob WHERE
Klauseln vor oder nach Joins usw.
Bei einer einfachen SELECT-Anweisung macht das vielleicht keinen Unterschied, aber bei jeder nicht-trivialen Abfrage wird die Datenbank einige Zeit brauchen (gemessen in Millisekunden, im Gegensatz zu den üblichen Mikrosekunden), um einen optimalen Plan zu erstellen. Bei wirklich komplexen Abfragen kann sie nicht einmal eine optimal Plan zu erstellen, muss er lediglich Heuristiken verwenden, um einen ziemlich gut Plan. Indem Sie ihn also zwingen, jedes Mal neu zu kompilieren, teilen Sie ihm mit, dass er diesen Prozess immer wieder durchlaufen muss, selbst wenn der Plan, den er zuvor erhalten hat, vollkommen gut war.
Je nach Anbieter sollte es automatische Auslöser für die Neukompilierung von Abfrageplänen geben - wenn sich beispielsweise die Statistiken einer Tabelle erheblich ändern (z. B. wenn das Histogramm der Werte in einer bestimmten Spalte anfangs gleichmäßig verteilt ist und im Laufe der Zeit stark verzerrt wird), dann sollte die DB dies bemerken und den Plan neu kompilieren. Aber im Allgemeinen sind die Implementierer einer Datenbank in dieser Hinsicht schlauer als Sie selbst.
Wie bei allem, was mit Leistung zu tun hat, sollten Sie nicht im Dunkeln tappen; finden Sie heraus, wo die Engpässe sind, die 90 % Ihrer Leistung kosten, und lösen Sie sie zuerst.