berechnete Felder Geschwindigkeit

20/10/2008 - 11:54 von Antje Kaiser | Report spam
Hallo zusammen,
ich habe mal eine strategische Frage und bin auf der Suche nach
Erfahrungswerten.
Im SQL-Server 2000 hatte ich folgendes Phànomen. Eine Tabelle (mit ca. 15000
Datensàtzen hat daneben eine Sprachtabelle und die Sprachen sind über N:M in
einer weiteren Zwischentabelle mit den Sàtzen in der Haupttabelle verknüpft.
Für die Anzeige der Datensàtze aus der Haupttabelle habe ich ein berechnetes
Feld eingefügt, daß mittels einer benutzerdefinierten Funktion die Sprachen
zusammenfaßt, sozusagen eine Stringaggregatfunktion, die z.B.
"deutsch/englisch/russisch" zurückgibt. Seitdem ich dieses Feld eingerichtet
habe, versuche ich tunlichst beim Abfragen von vielen Sàtzen dieses Feld
wegzulassen. Nehme ich alle 15000 Sàtze mit dem Feld kann das mal bis zu 2
min dauern.
Meine neue Anwendung liegt nun auf dem SQL-Server 2005 und beinhaltet
natürlich genau solche Konstrukte. Momentan habe ich noch nicht allzuviele
Testdaten, darum kann ich es schwer ausprobieren.
Sollte man solche Konstrukte vermeiden? Wenn ja wie? Oder habe ich
vielleicht im obigen Beispiel was falsch gemacht? Oder ist der SQL-Server
2005 auf dem Gebiet schneller?
Im Voraus danke für Eure Tips.

Gruß
Antje
 

Lesen sie die antworten

#1 Elmar Boye
20/10/2008 - 12:57 | Warnen spam
Hallo Antje,

"Antje Kaiser" schrieb im
Newsbeitrag news:
Im SQL-Server 2000 hatte ich folgendes Phànomen. Eine Tabelle (mit ca.
15000
Datensàtzen hat daneben eine Sprachtabelle und die Sprachen sind über N:M
in
einer weiteren Zwischentabelle mit den Sàtzen in der Haupttabelle
verknüpft.
Für die Anzeige der Datensàtze aus der Haupttabelle habe ich ein
berechnetes
Feld eingefügt, daß mittels einer benutzerdefinierten Funktion die
Sprachen
zusammenfaßt, sozusagen eine Stringaggregatfunktion, die z.B.
"deutsch/englisch/russisch" zurückgibt. Seitdem ich dieses Feld
eingerichtet
habe, versuche ich tunlichst beim Abfragen von vielen Sàtzen dieses Feld
wegzulassen. Nehme ich alle 15000 Sàtze mit dem Feld kann das mal bis zu 2
min dauern.



Abfragen sollten immer nur die Spalten abfragen, die sie auch nutzen.

Wenn Du mit "Stringaggregatfunktion" (die es so nicht gibt) eine skalare
Funktion (UDF)
meinst: Die sind generell etwas langsamer, da sie nicht im Abfrageplan
optimiert werden
können -> was für oben in 15.000 Aufrufe mündet (gilt auch für 2005/8).
Wo der Inhalt der Funktion überschaubar ist, verwende deswegen den Code
direkt
- auch wenns nicht so hübsch aufgeràumt aussieht ;-)

Meine neue Anwendung liegt nun auf dem SQL-Server 2005



Dort kannst Du für berechnete Felder die Option "PERSISTED" verwenden:
<URL:http://technet.microsoft.com/de-de/...3.aspx>

sofern die Kriterien erfüllt sind (und der Inhalt überschaubar groß ist).

Gruß Elmar

Ähnliche fragen