Re: Frage zu View-Tabellen
- From: Christoph Ingenhaag <ChristophIngenhaag@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Tue, 25 Mar 2008 03:15:02 -0700
"Elmar Boye" wrote:
Hallo Hilmar,
Hilmar Bunjes schrieb:
ich arbeite derzeit an einem Reservierungssystem und benötige gerade
eine Funktionalität, um eine Anzahl freier Plätze zu bestimmten
Zeiträumen zu bekommen. Da ich aufgrund von Einschränkungen bei meinem
OR-Mapper keine Stored Procedures verwenden kann, überlege ich, eine
ähnliche Funktionalität über View-Tabellen zu bekommen.
Ich bin mir aber unsicher, wie View-Tabellen intern gehandhabt werden.
View-Tabellen gibt es nicht, eine Sicht (View) ist ein
eigenes Element in SQL.
Sichten (View) sind in ihrer Grundform gespeicherte Abfragen,
die vom SQL Server beim Ausführen kompiliert und ausgeführt
werden. Sie benötigen keinen zusätzlichen Speicherplatz,
abseits ihrer Definition:
<URL:http://msdn2.microsoft.com/de-de/library/ms190174.aspx>
Erweiterungen sind indizierte Sichten (SQL Server 2000), die
zusätzliche Daten für den Zugriff speichern:
<URL:http://msdn2.microsoft.com/en-us/library/aa933148(SQL.80).aspx>
Bzw. ab SQL Server 2005 partitionierte Tabellen und Indizes:
<URL:http://msdn2.microsoft.com/de-de/library/ms188706.aspx>
und etwas weniger abstrakt der Artikel:
<URL:http://msdn2.microsoft.com/en-us/library/ms345146.aspx>
Beide sind transparent für die Anwendung und unabhängig
vom Einsatzbereich (Abfrage, Prozedur, Funktion, Sicht).
Sie könnten für den von Dir beschriebenen Anwendungsbereich
von Nutzen sein, wenn Du mit grösseren Volumina umgehst.
Kann ich mir vorstellen, dass diese ähnlich wie Stored Procedures> nur auf die Daten zugreifen, die ich gerade anfrage?
Ja.
Wäre es also von der
Performance und vom Speicherverbrauch ein Unterschied, ob ich eine
Anfrage auf eine View-Tabelle oder eine Stored Procedure schicke?
Nein.
Doch.
Wärend eine View eine virtuelle Tabelle ist, deren Definition (also das SQL
Statement) geparsed und als sog. algebrizer tree im Cache abgelegt wird bzw.
bei indizierten views der Inhalt materialisiert wird (also tatsächlich
gespeichert wird und nicht mehr virtuell ist) [Partitionierung mal ausser
Acht gelassen], ist eine Stored Procedure etwas ganz anderes. Bei Stored
Procedures wird der kompilierte Ausführungsplan im Cache gespeichert, der bei
Zugriffen auf die View in der Regel neu erstellt wird. Gleiches Verhalten
erreicht man auch, wenn man prepared statements statt adhoc statements
verwendet.
Bei simplen Statements ist der SQL Server in der Lage die hierfür erzeugten
Ausführungspläne für bis auf die Parameter verschiedene AdHoc statements
weiderzuverwenden.
Der Performance Unterschied kann also darin bestehen, das der Aufwand zur
Kompilierung entfällt und der Unterschied im Speicherverbrauch besteht darin,
das nur wenige kompilierte Pläne im Cache vorhanden sind und der Cache für
andere Dinge verwendet werden kann.
Ob das Auswirkung auf deine Applikation hat, hängt von verschiedenen
Faktoren ab. Ausschlaggebend ist hier insbesondere wie oft Statements
aufgerufen werden: Also Last. Entsprechende Lasttest deiner Applikation
verraten dir, wann dein SQL Server in die Knie geht.
btw, der Vorteil von Stored Procedures gegenüber prepared statements liegt
darin, dass man eine weitere Abstraktionsschicht gegenüber der Anwendung hat.
Änderungen, insbesondere solche aus Performancegesichtspunkten, lassen sich
hier mit viel weniger Aufwand umsetzen als Änderungen in der Applikation.
Vg
Christoph
.
- Follow-Ups:
- Re: Frage zu View-Tabellen
- From: Elmar Boye
- Re: Frage zu View-Tabellen
- References:
- Frage zu View-Tabellen
- From: Hilmar Bunjes
- Re: Frage zu View-Tabellen
- From: Elmar Boye
- Frage zu View-Tabellen
- Prev by Date: Re: Probleme mit Geschwindigkeit SQL 2005
- Next by Date: CRC Fehlermeldung beim Backup
- Previous by thread: Re: Frage zu View-Tabellen
- Next by thread: Re: Frage zu View-Tabellen
- Index(es):
Relevant Pages
|