[52444] in SAPr3-news
Re: Optimierung eines select Statements
daemon@ATHENA.MIT.EDU (Wulf Kruempelmann)
Wed Nov 24 15:46:15 2004
To: sapr3-news@mit.edu
Date: Wed, 24 Nov 2004 21:45:56 +0100
From: Wulf Kruempelmann <wulfk@t-online.de>
Message-ID: <co2rth$na2$02$1@news.t-online.com>
Rainer Huebenthal wrote:
> Moin Wulf Kruempelmann, du schriebst:
>
>
>>Was ist an DB-Queries schlecht?
>
>
> Nicht. Das * an Select ist boese. Statt genau zu sagen was man
> braucht, holt man lieber alles in den Applikationsserver und
> beackert es dort und schmeisst alles weg was man nicht
> braucht.
>
>
>>Die Alternative, mit einem inner join zu arbeiten ist bei großen
>>Tabellen sehr oft sehr langsam.
>
>
> Dann legt man sich einen oder auch mehrere Indexe an. Das man
> die Problematik in den Applikationsserver verlagert
> verschlimmert alles nur noch.
Nein. Der Index hilft nicht, wenn man einen inner join macht.
>
>
>>Einige Datenbanken bilden einen Inner join so ab, daß sie beide Tabellen
>>nehmen und im Temp-Tablespace die Tabellen ausmultiplizieren und dann
>>aus dieser Zwischentabelle selektieren.
>
>
> Im Applikationsserver ist das anders?
Ja. Dort lade ich eine Tabelle in den Speicher und mache einen Binary
search auf eine einzelne Zeile.
Die DB nimmt bei einem inner join Tabelle 1 und multipliziert jede Zeile
mit allen möglichen Werten der 2 Tabelle aus. Daraus wird im temp space
eine neue temporäre Tab gebaut, die wesentlich größer ist als beide
Tabellen zusammen und auch keinen vernünftigen Index hat.
Dieses Problem tritt nicht bei allen Datenbanken auf, aber ein 2 recht
oft benutzten schon.
>
>
>>Das wird dann so langsam, daß man echte Probleme bekommt.
>>Und die hier benutzten Tabellen sind oft sehr groß.
>
>
> Das Problem trifft dich im Applikationsserver genauso, evtl
> viel schlimmer, da man
>
> -oft mehr Daten holt als notwenig
> - öfter Datenbankabfragen absetzt als nötig.
Nein.
Ich setze exakt 2 Abfragen ab und habe alles im Memory, auf das ich mit
binary seach, also mit einem Index zugreife.
>
> Letztens hab ich wieder gesehen, wie jemand ein Select * auf
> eine ganze Tabelle abgesetzt hat, diese im ABAP sortiert um
> dann den ersten als einzigen Satz verabreitet hat. Bei sowas
> wird mir nur schlecht, wenn ich sowas sehe. Ein kurzer
> knackiger Subselct waere wesentlich performanter gewesen.
jo, select single (...) from abc where order by ...
>
> cu
> Rainer
>