[52445] in SAPr3-news

home help back first fref pref prev next nref lref last post

Re: Optimierung eines select Statements

daemon@ATHENA.MIT.EDU (Rainer Huebenthal)
Wed Nov 24 16:09:58 2004

To: sapr3-news@mit.edu
Date: Wed, 24 Nov 2004 22:09:55 +0100
From: Rainer Huebenthal <usenet200412.20.finji@spamgourmet.com>
Message-ID: <1eucakxkcptaz$.dlg@news.reisetraeume.com>
Reply-To: usenet-reply.20.finji@spamgourmet.com

Moin Wulf Kruempelmann, du schriebst:

>> 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.

Natuerlich hilf der.

> 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. 

Das ist nicht richtig.

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.

Das ist nicht richtig.

> Dieses Problem tritt nicht bei allen Datenbanken auf, aber ein 2 recht 
> oft benutzten schon.

Bei DB2 und oracle jedenfalls nichjt.

> Nein.
> Ich setze exakt 2 Abfragen ab und habe alles im Memory, 

Das ist schon eine Abfrage zu viel, und ob Teile deines codes
noch im RAM sind oder ausgelagert werden und dann fleissig
geswapped wird hast du nicht unter Kontrolle. Virtueller
Speicher existiert.


>auf das ich mit 
> binary seach, also mit einem Index zugreife.

[_] Du hast verstanden, wie in Index auf einer Tabelle
funktionmiert und wie darauf gesucht wird.

Wie kommt es nur, das ich durch geschicktes Setzen eines
Indexes einen Index-Only Match bei einem Subselect erreiche?
Und du glaubst wirklich, mit popligem ABAP Code den Optimizer
schlagen zu können? Das sind wirklich nur noch Ausnahmen, in
denen das möglich ist.

> jo, select single (...) from abc where order by ...

Das ist ziemlich unperformanter Bloedsinn. Wieso sollte ich
eine ganze Tabelle sortiert in den DB Cache holen, um dann
genau eine Zeile zu kriegen, wo ich das gane mit einem
Subselect ohne Sortierung hinkriege und genau eine Zeile
selektiere und nicht n, von denen ich n-1 wieder wegschmeisse?
Lies mal die F1 Hilfe zu order by und zu up to n rows, da
schon es angedeutet.

Dein ABAP Coding in Ehren, aber mit geschickten Select
Abfragen kannst du nie und nimmer mithalten.


cu
  Rainer

-- 
http://www.reisetraeume.com

home help back first fref pref prev next nref lref last post