Verwenden von sichten anstelle von Tabellen in stored procedures?
Ist es eine gute Praxis, query views, statt der raw-Tabellen in stored procedures? (auch wenn die Sicht nicht irgendwelche anderen Daten)
Ich dachte immer, es wäre eine gute Idee, denn es ist ein zusätzlicher Abstraktions-layer und die ähnlich mit Eigenschaften anstelle von member-Variablen in Funktionen der Klasse.
Aber jetzt war ich auf der Suche auf die gespeicherten Prozeduren erstellt von der ASP.NET die Mitgliedschaft Anbieter, der immer die Abfrage für die Tabellen direkt.
Ich bin mir bewusst, dass Sie cant fügen Sie Daten ganz einfach, wenn Sie Ansichten verwenden, aber wenn die gespeicherte Prozedur nur Daten Abfragen, sollte Sie immer noch mit Tabellen direkt? Wenn ja, was ist der Hauptgrund? (Leistung?)
InformationsquelleAutor magnattic | 2011-02-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick ist nur ein makro, das sich in einer äußeren Abfrage.
Wenn Ihre Ansicht enthält mehrere Verknüpfungen, wenn Sie dann beitreten, wenn zu anderen Ansichten, die Sie plötzlich haben eine 20 oder 30 Weise anschließen, wenn Sie wirklich sehen, 3 JOINs in der SQL die gespeicherte Prozedur. Sie finden auch, dass jede Abfrage ist anders: warum halten sich das gleiche 20 oder 30 Tabellen für jede Abfrage?
Gibt es generell keinen Vorteil, es sei denn, die Aussicht ist indiziert/aus, und der Optimierer ihn benutzen können.
Ideen wie die Berechnungen auf einer einzelnen Tabelle maskiert durch eine Ansicht sein sollte, die in einer berechneten Spalte: warum berechnen? Für eine Berechnung auf mehrere Tabellen in einem view sollte es indiziert werden.
Mithilfe einer gespeicherten Prozedur schon bedeutet, dass keine Basis-Tabelle zugreifen (ownership chaining).
Es gibt gute Verwendungen von Ansichten zu vermeiden Sie direkte-Tabelle Zugriff von Benutzern, oder die Maske-schema-änderungen, oder geben Sie einige grundlegende Sicherheits - (z.B. basierend auf SUSER_SNAME), aber nicht für die Leistung oder Ideologie
InformationsquelleAutor gbn
Verschiedenen Datenbank-Optimierer Optimierung von Abfragen in unterschiedlicher Weise, so dass es nicht eine einfache Antwort. Aber in der Regel fügt eine Schicht der Abstraktion kann (nicht definitiv) halt der Optimierer Indizes verwendet richtig.
In Sql Server, wenn Sie eine where-Klausel, die enthält Aufrufe wie:
macht es non-sargable query, also eine Abfrage, die keine Indizes verwenden - oder Sie benutzt, die sub-optimal.
Ich würde vermuten, dass mit einem Blick wird auch Auswirkungen auf den sarg. Ich werde gehen und dies testen (Sql-Server) - ich werde in 5 Minuten wieder zurück.
BEARBEITEN
Ich denke, dass die Antwort ist "es hängt", und dass Sie brauchen, um auf Ihre query execution plan, um sicher zu sein, den folgenden test, den ich machte, ergab sich kein Unterschied zwischen der Abfrage einer einfachen Ansicht, auf einer Tabelle basiert und einfach die Abfrage der zugrunde liegenden Tabelle. Aber es braucht weitere Tests, wie eine komplexe Sicht könnte anders handeln.
Es war nur vier Minuten!
InformationsquelleAutor amelvin
Benutzt habe ich Ansichten, die in gespeicherten Prozeduren in diesen beiden Fällen:
1 - für komplexe joins oder Bedingungen, die erforderlich sind, mehrere Verfahren
2 - zu-Ersatz für eine Tabelle umbenannt. Zum Beispiel hatte ich zwei Tabellen, genannt 'Mitglied' und 'non_member'. Später entschied ich mich, diese kombinieren in einer 'user' - Tabelle. Um zu vermeiden, ändern jeden proc, die ich je geschrieben hatte, habe ich Blick auf die genannten 'Mitglied' und 'non_member', die die where-Klausel zum filtern der 'user' - Tabelle entsprechend. Alle procs lief, wie Sie verwendet, um ohne änderungen. Ich kann Sie ändern, um den Zugriff auf die neue Tabelle direkt, wenn ich Zeit habe.
InformationsquelleAutor Ray
In SQL-Server (zumindest) mein Verständnis ist, dass Gespeicherte Prozeduren sind optimiert zur compile-Zeit, und daher effizienter sind im Allgemeinen als Ansichten. Ich bin nicht sicher, aber ich vermute, dass durch ausführen einer SPRC gegen eine Sicht, verlieren Sie möglicherweise alle Optimierung der sich auf diese Weise.
Weiter, warum? Wie eine Vorherige Plakat sugessted, Sie kann ausgeführt werden, die mehr verbindet, als Sie zu brauchen, wenn eine oder mehrere der Ansichten, die Sie selbst aus zahlreichen Verknüpfungen, und es ist nicht offensichtlich.
Auch, mein Verständnis ist, dass einer der primären Gründe für die Verwendung von Ansichten in der vorliegenden Tabelle sind Daten in einem format, das der Nutzer verbrauchen kann, während der Schutz Tabelle Daten gegen unbeabsichtigte änderungen. Da das Ergebnis einer SPROC ist nicht Gegenstand der INSERTS und UPDATES, dieser Punkt ist strittig.
Da eine gespeicherte Prozedur, die von design-Parameter akzeptiert, nicht dem Benutzer erlauben, zu interagieren mit Tabelle Daten direkt, und kann ausführen einer Abfrage mit der Logik könnten Sie in einer Ansicht (plus eine ganze Menge mehr), es scheint mir, dass (mit einigen Ausnahmen) der Hauptgrund, könnte man dies zu tun ist, um das Programmieren einfacher machen, an die potenziellen Kosten der performance und Wartbarkeit (was ist, wenn jemand änderungen in einer der Ansichten, ohne zu merken, Ihre SPROC von ihm abhängen?).
Empfehle ich die Codierung es werden alle in der SPROC, es sei denn, es gibt einen zwingenden Grund, es anders zu machen . . .
InformationsquelleAutor XIVSolutions