2017-04-21 1 views
2

Ich habe versucht, auf verschiedene Arten zu suchen, habe aber keine eindeutige Antwort auf meine Frage gefunden. This question beantwortet fast meine Abfrage, aber nicht ganz.Vorteile für Ansichten in gespeicherten Prozeduren

Neben den offensichtlichen Lesbarkeit Unterschiede, gibt es irgendwelche Vorteile eine Ansicht in einer gespeicherten Prozedur zu verwenden:

SELECT 
    * 
FROM 
    view1 
WHERE 
    view1.fdate > @start AND 
    view1.fdate <= @end 

... über eine verknüpfte Tabelle Liste mit ...

SELECT 
    * 
FROM 
    table1 
    INNER JOIN 
    table2 
     ON table1.pid = table2.fid 
    INNER JOIN 
    table3 
     ON table1.pid = table3.fid 
WHERE 
    table1.fdate > @start AND 
    table1.fdate <= @end 

. ..in einer preapred-Anweisung oder gespeicherten Prozedur?

+1

Nun, einige Ansichten können indiziert werden, sodass in manchen Fällen indizierte Ansichten die Leistung verbessern können. Abgesehen davon, dass ich bezweifle, ob es einen wirklichen Unterschied gibt. Ich denke jedoch, dass DBA-Experten wahrscheinlich bessere Antworten finden können, also werde ich es als Kommentar hinterlassen. –

+0

Vielen Dank für Ihre Eingabe, @ZoharPeled. Ich habe das bemerkt, aber wären die Indizes auf Tabellenebene nicht genauso nützlich (wenn die Tabelle von vornherein richtig indiziert wird)? – Paul

+1

@Paul indizierte Sichten können Indizes erstellen, die von Tabellenindizes nicht gefunden werden können, z. Eine indizierte Sicht kann Aggregate enthalten. –

Antwort

2

Ist das nicht alles über Ihre App und Sie.

Denken Enterprise-Datenbanken, mit zig verschiedenen Anwendungen die gleichen Daten, und Hunderte von Personen Zugriff auf die Daten für geschäftliche Zwecke abfragt. Wie erklären Sie jedem der vielen Individuen, wie Sie Ihre hoch normalisierten Daten neu zusammensetzen können? Welches Nachschlagefeld entspricht welcher Tabelle? Wie sind sie zusammen? Und wie gewähren Sie nur Lesezugriff auf die Daten und stellen sicher, dass einige sensible Felder nicht zugänglich sind, ohne sich selbst zu wiederholen?

Sie die DBA, erstellen VIEWs. Sie denormalisieren die Daten in einfach zu verarbeitende Beziehungen für die Geschäftsleute, für die vielen Apps und für die Berichte. Sie erteilen den Sichten die Berechtigung select, ohne Zugriff auf die zugrunde liegende Tabelle zu gewähren, um vertrauliche private Felder auszublenden. Und irgendwann schreibst du Ansichten, weil du müde bist, um Mitternacht angerufen zu werden, weil die Datenbank "down" ist, weil Johnny von der Buchhaltung einen kartesischen Join ausführt.

+1

Dieser Johnny ist nichts als truble ... :-) –

+0

Ich habe ehrlich gesagt nicht daran gedacht (ich bin ein egoistischer Entwickler, immerhin kein echter DBA!). Das ist nützliche Info - Danke. – Paul

0

Es gibt keinen Unterschied. Abfragepläne sind in beiden Fällen identisch. Abfrageoptimierer kann auch indizierte Sicht verwenden, wenn Sie es nicht explizit verwenden (im Fall 2)

Verwandte Themen