Views und Indizes (Index)

Advantage Database Server

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Views und Indizes (Index)

Beitrag von UliTs »

Hallo,

ich nutze zur Zeit noch ADS 8.1 und muß deshalb bei einem komplizieren SQL-Ausdruck vorher eine VIEW im Data Dictionary definiert haben, die ich anschließend im eigentlichen SQL-Statement nutzen kann.
Leider ist der Zugriff auf die daraus resultierende Tabelle viel zu langsam. Der Execution Plan zeigt an, dass bei der VIEW kein Index benutzt wird.

Frage: kann ich Indizes zu Views erstellen?

Der folgende Code funktioniert leider nicht.

Code: Alles auswählen

CREATE VIEW KommStatusAktuell
AS SELECT   KomSt.*
FROM        KommStatus As KomSt 
INNER JOIN  (SELECT KomSt2.KommNr,Max(KomSt2.Datum) As MaxDatum
             FROM KommStatus As KomSt2
             //WHERE KomSt2.Datum<=:AmDatum
             GROUP BY KomSt2.KommNr) As KomSt3
INNER JOIN  (SELECT KomSt4.KommNr,Max(KomSt4.Uhrzeit) As MaxUhrzeit
             FROM KommStatus As KomSt4
             GROUP BY KomSt4.KommNr) As KomSt5
ON          KomSt.KommNr = KomSt5.KommNr And
	        KomSt.Uhrzeit = KomSt5.MaxUhrzeit
ON          KomSt.KommNr = KomSt3.KommNr And
	        KomSt.Datum = KomSt3.MaxDatum;
CREATE UNIQUE INDEX KomStId ON KommStatusAktuell( KomStId );
CREATE INDEX KommNr ON KommStatusAktuell( KommNr );
CREATE INDEX FStId  On KommStatusAktuell( FStId );
CREATE INDEX PStId  On KommStatusAktuell( PStId );
CREATE INDEX DatumUhrzeit ON KommStatusAktuell( Datum,Uhrzeit );
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Friedhelm
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 46
Registriert: Sa, 08. Apr 2006 17:20
Wohnort: Leverkusen
Kontaktdaten:

Re: Views und Indizes (Index)

Beitrag von Friedhelm »

EHallo Ulli, eine View ist nicht anderers als ein vorbereites SELECT Statement. Häufüg benutzte SELECT anweisungen kann man daher in eine View verfrachten und sie später entweder direkt abfragen, oder ein ein weiteres SELECT Statement einbauen. Das Ablegen eines SELECT Statements hat darüber hinaus den Vorteil das sie etwas schneller sind als das verschachteln von SELECT Anweisungen.
Jedoch wie bei jedem SQL Query hängt letztzendlich die Geschwindigkeit der Ausführung vom Optimierungsgrad des Query auf dem ADS ab. Der ADS ververwendet eine Reihe von Optimierungsregeln. Eine davon ist die Rushmore Technologie, welches Querys dahingehend untersucht, ob es auf vorhandene Indizes angewendet und abgeleitet werden kann.

Wenn du, wie in deinem Beispiel ein JOIN verwendest um Tabellen miteinander zu verknüpfen, so ist es wichtig das der Verknüpfungsausdruck ( mit ON angegeben) von einem Index abgeleitet werden kann.
Gruß Friedhelm
Antworten