Ich habe kürzlich festgestellt, dass niemand Ansichten in meiner Firma verwendet (und es ist eine große Firma).
Ich möchte ein paar Ansichten erstellen, hauptsächlich weil sie meine Abfragen für das Auge einfacher machen, und diese Ansichten sind auf ziemlich großen Tabellen, die nicht sehr häufig aktualisiert werden (einmal am Tag).
Meine Alternative besteht darin, eine Typentabelle vom Typ record zu erstellen und sie jedes Mal aufzufüllen, wenn ein SP aufgerufen wird. Ist das besser als eine Ansicht? (Meine Vermutung ist nein)
PS: Datenbank ist Oracle 10g und BEARBEITEN: - Ja, ich habe gefragt, aber niemand konnte mir einen Grund geben. - Sowohl die Ansichten als auch die Abfragen, die sie verwenden, sind schwer auf Joins.
Ästhetik hat keinen Platz in SQL oder Codierung im Allgemeinen, wenn es Auswirkungen auf die Leistung gibt.
Wenn der Optimierer feststellt, dass Prädikat-Pushing auftreten kann, ist eine Ansicht so gut wie die Tabelle (n), die die Ansicht darstellt, direkt abzufragen. Und wie Justin erwähnt, da eine View ein Makro ist, das in die zugrunde liegende Abfrage expandiert, die die View darstellt, ist eine weiche Syntaxanalyse (Wiederverwendung der Abfrage aus dem Cache) sehr wahrscheinlich, da die Cache-Prüfung Abfragen genau abgleichen muss. p>
Aber beachten Sie Folgendes:
Ich empfehle, Ihre Ansichten zu erstellen und die EXPLAIN-Pläne zu vergleichen, um sicherzustellen, dass Sie mindestens identische Leistung erhalten. Ich müsste Ihren Code zum Auffüllen eines TYPE sehen, bevor Sie den Ansatz kommentieren, aber er klingt im Wesentlichen nach einer abgeleiteten Tabelle ...
Es ist möglich, dass Sie davon profitieren würden, materialisierte Ansichten zu verwenden, aber sie sind berüchtigt dafür, was sie unterstützen.
Es klingt sicherlich so, als ob das Erstellen einiger Ansichten in diesem Fall hilfreich wäre.
Haben Sie gefragt, warum niemand Ansichten verwendet? Das scheint ziemlich merkwürdig und würde sicherlich darauf hindeuten, dass Sie Ihr SQL nicht sehr effizient wiederverwenden. Ohne Sichten würden Sie die gleiche Logik in vielen verschiedenen SQL-Anweisungen anstatt in einer einzigen Ansicht verwenden, was die Wartung zu einem Problem machen würde.
Ein Grund, Ansichten nicht zu verwenden, die gültig sein können oder nicht ... ist, dass sie das Potenzial haben, Komplexität zu erzeugen, wo es keine gibt.
Zum Beispiel könnte ich
schreiben %Vor%dann könnte ich später schreiben
%Vor%Ich erstelle jetzt Objekte, die bereitgestellt, verwaltet, versionsgesteuert usw. sein müssen ...
Oder ich könnte entweder
schreiben %Vor%oder
%Vor%Und jetzt muss ich nur ein einzelnes Objekt bereitstellen, warten und versionieren.
Wenn <SOME COMPLEX QUERY>
nur in einem Kontext existiert und zwei separate Objekte verwaltet werden, entsteht eine unnötige Belastung. Auch nach der Bereitstellung müssen Änderungen an Dingen durchgeführt werden, die auf UseFoo
angewiesen sind. Wenn Sie zwei Objekte haben, müssen Sie alles besuchen, was bei UseFoo
und Foo
Wenn andererseits Foo
für eine gemeinsame Logik steht, ist die Auswertung trotzdem erforderlich, aber Sie müssen nur ein einzelnes Objekt finden und ändern.
Ich habe die Erfahrung gemacht, dass wenn Sie eine große / komplexe Datenbank und einige komplexe Abfragen und keine Ansichten haben, dies nur deshalb der Fall ist, weil die Benutzer einfach nicht wissen, welche Ansichten sie verwenden oder wie sie verwendet werden. Nachdem ich die Vorteile einer Ansicht erklärt hatte, verwendeten die meisten Leute sie ohne Probleme.
Aus Ihrer Beschreibung würde ich nur eine Ansicht machen, keine neue Tabelle.
Ansichten eignen sich hervorragend zum Verbergen von Komplexität - wenn Ihre Benutzer die Ansichten, die Sie erstellen, einfach so ausführen können (anstatt eine Abfrage für die Ansicht zu schreiben), ist das gut.
Aber Ansichten sind auch mit Leistungsproblemen verbunden - wenn Ihre Benutzer wissen, wie man sql schreibt, und sie die Tabellen verstehen, die sie verwenden, ist es vielleicht besser, sie das tun zu lassen.
Beachten Sie auch, dass gespeicherte Prozeduren weniger anfällig für (die gleichen) Leistungsprobleme sind wie Ansichten.
hier ist ein Link zu und ein Ausschnitt aus einem schönen Artikel, der Ansichten beschreibt und wie man sie für bessere Leistung abstimmt.
Verwendung von Ansichten
Ansichten sind nützlich, um eine horizontale oder vertikale Teilmenge von Daten bereitzustellen aus einer Tabelle (möglicherweise aus Sicherheitsgründen); zum Verstecken der Komplexität einer Abfrage; um sicherzustellen, dass genau die gleiche SQL verwendet wird während Ihrer Bewerbung; und in n-Tier-Anwendungen abrufen Zusatzinformationen zu einem Artikel aus einer verwandten Tabelle ......