Ist die Abfrage einer Ansicht langsamer als die direkte Ausführung von SQL?

8

Szenario:

Ich habe 3 Tabellen, die zusammengefügt werden müssen, eine where-Klausel, um die Ergebnismenge zu begrenzen, und nur ein paar Spalten aus jeder Tabelle ausgewählt werden. Einfach. Allerdings ist die Abfrage, dies zu tun, nicht sehr schön, und wenn Sie ein ORM zwischen der Datenbank und der Anwendung verwenden, ist es so, als würde man versuchen, einen quadratischen Stift in ein rundes Loch zu stecken.

Mein Weg, dies zu umgehen, besteht darin, eine Sicht zu erstellen, die die Abfrage umfasst, und jetzt wird mein Anwendungsmodell direkt einer Ansicht in der Datenbank zugeordnet; nicht mehr verrückt, die ORM-Schicht zuzuordnen.

Frage: Unter der Annahme, dass hier keine anderen Faktoren zum Tragen kommen, wird die Abfrage gegen die Ansicht zusätzliche Leistungseinbußen nach sich ziehen, die ich nicht getroffen hätte, wenn ich die SQL-Anweisung direkt ausgeführt hätte? - Dies ist keine indizierte Sicht, nehme die selbe where-Klausel an, behalte das einfach.

Ich werde dazu gebracht, zu glauben, dass eine Ansicht unter dem zusätzlichen Aufwand leidet, "gebaut zu werden". Mein Verständnis ist, dass bei allem anderen die gleiche Leistung identisch sein sollte.

Bitte klären Sie. Danke!

    
PAR 07.01.2011, 21:53
quelle

2 Antworten

4

Von MSDN: Anzeigeauflösung

  

Wenn eine SQL-Anweisung auf eine nicht indizierte Sicht verweist, analysieren der Parser und der Abfrageoptimierer die Quelle der SQL-Anweisung und der Sicht und führen sie dann in einem einzigen Ausführungsplan zusammen. Es gibt keinen Plan für die SQL-Anweisung und einen separaten Plan für die Ansicht.

Es sollte keine unterschiedliche Leistung geben. Ansichten helfen Ihnen zu organisieren, keine Leistungssteigerung. Es sei denn, Sie verwenden indizierte Sichten.

  

Nur die Definition einer nicht indizierten Sicht wird gespeichert, nicht die Zeilen der Sicht. Der Abfrageoptimierer integriert die Logik aus der Sichtdefinition in den Ausführungsplan, der für die SQL-Anweisung erstellt wird, die auf die nicht indizierte Sicht verweist.

    
stian.net 07.01.2011, 22:00
quelle
3

In Oracle ist die Leistung gleich. Eine Sicht ist wirklich eine benannte SQL-Anweisung. Aber Züchter.

Wenn Sie mit dem Verschachteln von Ansichten beginnen und Ansichten mit anderen Tabellen oder Ansichten verknüpfen, werden die Dinge schnell kompliziert. Wenn Oracle Ihre Filter nicht in die Ansicht der Tabelle verschieben kann, muss es oft Teile der Abfrage materialisieren (eine temporäre Tabelle erstellen), und das ist, wenn Sie die schlechte Leistung erhalten.

    
Ronnis 07.01.2011 23:10
quelle

Tags und Links