Performanceoptimierung mit Views: Verständnisproblem?

14/09/2007 - 09:41 von Paul Schmidinger | Report spam
Hallo,

ich war eigentlich der Meinung nach diverser Lektüre halbwegs verstanden zu
haben was Views sind und wie ich sie für Performancegewinne nutzen kann. Die
Ergebnisse der letzten Experimente sind für mich aber nicht nachvollziehbar.

Mein Gedankengang war folgender, bitte um Hinweise wo ich irre:

- habe einen zeitaufwàndigen Query bei dem jeweils ca. 8 Tabellen gejoint
werden
- Ein guter Teil des Queries ist immer konstant, nur wenig àndert sich
dynamisch
- ich habe also den "Kern" in ein View mit sagen wir 4 Tabellen ausgelagert,
und übrig bleibt der optimierte Query der nur noch 4 Tabellen plus View
verwendet
- ich habe mir da wesentliche Performancegewinne erhoffe, doch diese blieben
aus. Fallweise minimal schneller, fallweise sogar langsamer.

Und es kommt noch besser:

- ich habe einen Query mit 4 beteiligten Tabellen ausgeführt und die Zeit
genommen
- Dann habe ich mit diesen Query ein View erstellt
- Und ein simples Select * From View gemacht
- absolut KEIN Performancegewinn

Jedes View hatte einen clustered Index auf dem PK der beteiligten
"Haupttabelle" sowie Indizes für Felder die im WHERE vorkamen. Schemabinding
war true. Um Duplikate zu vermeiden war im View ein GROUP BY über alle
Spalten vorhanden, und ein COUNT_BIG(*) wurde ergànzt weils ohne eben nicht
geht. Es geht konkret um SQL Server 2005.

Mit scheint die Problematik so gundlegend dass vielleicht gar keine
detaillierten Angaben zu Tabellen, Queries notwendig sind. Ansonsten kann
ich natürlich Infos nachreichen...

Danke und LG,
Paul
 

Lesen sie die antworten

#1 Christoph Muthmann
14/09/2007 - 12:00 | Warnen spam
Paul Schmidinger wrote:
Hallo,

ich war eigentlich der Meinung nach diverser Lektüre halbwegs
verstanden zu haben was Views sind und wie ich sie für
Performancegewinne nutzen kann. Die Ergebnisse der letzten
Experimente sind für mich aber nicht nachvollziehbar.
Mein Gedankengang war folgender, bitte um Hinweise wo ich irre:

- habe einen zeitaufwàndigen Query bei dem jeweils ca. 8 Tabellen
gejoint werden
- Ein guter Teil des Queries ist immer konstant, nur wenig àndert
sich
dynamisch
- ich habe also den "Kern" in ein View mit sagen wir 4 Tabellen
ausgelagert, und übrig bleibt der optimierte Query der nur noch 4
Tabellen plus View verwendet
- ich habe mir da wesentliche Performancegewinne erhoffe, doch diese
blieben aus. Fallweise minimal schneller, fallweise sogar langsamer.

Und es kommt noch besser:

- ich habe einen Query mit 4 beteiligten Tabellen ausgeführt und die
Zeit genommen
- Dann habe ich mit diesen Query ein View erstellt
- Und ein simples Select * From View gemacht
- absolut KEIN Performancegewinn

Jedes View hatte einen clustered Index auf dem PK der beteiligten
"Haupttabelle" sowie Indizes für Felder die im WHERE vorkamen.
Schemabinding war true. Um Duplikate zu vermeiden war im View ein
GROUP BY über alle Spalten vorhanden, und ein COUNT_BIG(*) wurde
ergànzt weils ohne eben nicht geht. Es geht konkret um SQL Server
2005.
Mit scheint die Problematik so gundlegend dass vielleicht gar keine
detaillierten Angaben zu Tabellen, Queries notwendig sind. Ansonsten
kann ich natürlich Infos nachreichen...



Hallo Paul,
Views sind erst mal nur Teile SQL-Code, die der Optimizer zur Not auch
wieder auseinandernimmt und mit Deinem SQL mischt. Einen
Performance-Gewinn bekommst Du erst mal nicht. Du kannst sie verwenden
um Teile von Tabellen vor neugierigen Augen zu schützen oder
Standard-Joins einfach zur Verfügung zu stellen.

Meinst Du vielleicht indexed Views in SQLServer?
http://www.microsoft.com/technet/pr...prfiv.mspx
Improving Performance with SQL Server 2005 Indexed Views

Dort steht u. a. aber auch:
In the case of a non-indexed view, the portions of the view necessary
to solve the query are materialized at run time. Any computations such
as joins or aggregations are done during query execution for each query
referencing the view1.

Einen schönen Tag noch,
Christoph
(Please post ALL replies to the newsgroup only unless indicated
otherwise)

Ähnliche fragen