2013-06-03 12 views
27

Ich habe ein Problem zu entscheiden, ob eine Ansicht oder eine temporäre Tabelle verwendet werden soll.Was zu verwenden? Ansicht oder temporäre Tabelle

Ich habe eine gespeicherte Prozedur, die ich aus dem Programm aufrufen. In diesem SP speichere ich das Ergebnis einer langen Abfrage in einer temporären Tabelle, benenne die Spalten und führe eine andere Abfrage für diese Tabelle durch, um die Ergebnisse in Labels oder einer Gridview oder was auch immer zu speichern und die Temp-Tabelle zu löschen. Ich könnte das Abfrageergebnis auch in einer Ansicht speichern und Abfragen für diese Ansicht durchführen. Also, was ist besser oder in welchem ​​Fall muss ich eine VIEW/Temp Tabelle verwenden.

Nach meiner Forschung hat eine Ansicht den Vorteil von: Sicherheit, Einfachheit und Spaltenname Spezifikation. Mein temporärer Tisch erfüllt all das (meiner Meinung nach).

+1

Wenn Sie Ihre Ziele nicht angeben und sie hinsichtlich ihrer Wichtigkeit für Sie einstufen, ist dies eine wirklich zu allgemeine Frage. – Tim

+0

Nur mögliche Antwort für diese Frage ist: Sie müssen beide versuchen und sehen, welche besser funktioniert. –

Antwort

28

Wenn die Abfrage "lang" ist und Sie auf die Ergebnisse mehrerer Abfragen zugreifen, ist eine temporäre Tabelle die bessere Wahl. Eine Ansicht ist im Allgemeinen nur eine Abkürzung für eine select Aussage. Dies bedeutet nicht, dass die Ergebnisse jemals ausgeführt und verarbeitet werden. Wenn Sie eine Ansicht verwenden, müssen die Ergebnisse bei jeder Verwendung neu generiert werden. Obwohl nachfolgende Aufrufe der Ansicht effizienter sein können (z. B. weil die von der Sichtabfrage verwendeten Seiten sich im Cache befinden), speichert eine temporäre Tabelle die Ergebnisse.

In SQL Server können Sie auch Tabellenvariablen (declare @t table . . .) verwenden.

Die Verwendung einer temporären Tabelle (oder Tabellenvariable) innerhalb einer einzigen gespeicherten Prozedur scheint nur geringe Auswirkungen auf die Sicherheit, Einfachheit und Spaltennamen zu haben. Die Sicherheit würde durch den Zugriff auf die gespeicherte Prozedur gehandhabt werden. Spaltennamen werden für beide Lösungen benötigt. Einfachheit ist ohne weitere Informationen schwer zu beurteilen, aber nichts sticht als besonders kompliziert hervor.

6

hängt

Eine Ansicht muss die Bearbeitung Ihrer „lange Abfrage“ replizieren jedes Mal ausgeführt wird, während eine temporäre Tabelle, die Ergebnisse speichert.

also möchten Sie mehr Verarbeitung oder mehr Speicher verwenden?

Sie können einige Ansichtswerte (persistenter Index) speichern, die bei der Verarbeitung helfen könnten, aber Sie liefern nicht genügend Informationen, um dies wirklich zu untersuchen.

Wenn Sie nur über das Speichern der Daten für die Verwendung innerhalb eines einzelnen Prozeduraufrufs sprechen, ist eine temporäre Tabelle der richtige Weg.

2

Es ist wirklich eine situative und betriebsspezifische Frage und Antwort kann je nach den Anforderungen des Szenarios variieren. Ein kleiner Punkt, den ich hinzufügen möchte, ist jedoch, dass es bei der Verwendung einer Ansicht zum Speichern von Ergebnissen einer komplexen Abfrage, die wiederum in Operationen einer GridView verwendet werden, schwierig ist, Aktualisierungsoperationen an komplexen durchzuführen Ansichten. Im Gegensatz dazu können Temp-Tabellen dazu vollkommen ausreichen.

Auch hier gibt es Szenarios, in denen Views eine bessere Wahl sein können [wie bei mehreren Datenbankservern, wenn sie nicht richtig gehandhabt werden], aber es hängt davon ab, was Sie tun möchten.

Verwandte Themen