Gibt es einen Grund, Ansichten in Oracle nicht zu verwenden?

8

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.

    
LoudNPossiblyWrong 15.07.2011, 17:51
quelle

6 Antworten

6

Ä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:

  • Layering-Ansichten (eine Ansicht basierend auf einer anderen) ist eine schlechte Übung - Fehler werden nicht auftreten, bis die Ansicht ausgeführt wird
  • das Verbinden von Sichten mit anderen Tabellen und / oder Sichten ist höchst verdächtig - das Optimierungsprogramm sieht die Dinge möglicherweise nicht so gut, wenn die zugrundeliegende Abfrage anstelle der Sichtenreferenz verwendet wird. Ich habe solche Erfahrungen gemacht, weil die Ansichten, die mit Joins verknüpft wurden, mehr als das benötigten, was die Abfrage benötigte - manchmal wurden die Abfragen von allen verwendeten Ansichten zu einer einzelnen Abfrage zusammengefasst, die viel besser lief.

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.

    
OMG Ponies 15.07.2011, 18:11
quelle
5

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.

    
Justin Cave 15.07.2011 17:54
quelle
2

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

ausgewertet wird

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.

    
Conrad Frix 15.07.2011 18:28
quelle
1

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.

    
jworrin 15.07.2011 17:55
quelle
0

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.

    
Chains 15.07.2011 18:02
quelle
0

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 ......

Ссылка

    
Graham 15.07.2011 18:07
quelle

Tags und Links