Die Entdeckung der Langsamkeit - ein SQL-Befehl


[ ruban.de ] [ Antworten ] [ Forum ]

Geschrieben von Bunbury on August 19, 2003 um 15:16:

Hallo DB2-Anwender,

zur Zeit stehe ich vor folgendem Abgrund von SQL-Abfrage: Wir haben unsere Artikel mit Merkmalen (z. B. Farbe, Größe usw.) und dazugehörigen Ausprägungen (gelb, blau, grün, usw.) klassifiziert und möchten nun anhand der vom Kunden ausgewählten Merkmal und Ausprägungen den infrage kommenden Artikel suchen.

Artikelstamm: SQL-Table SQLUSER.PROD_MODELL

Artikel-Nr.
(p_modell) Zuord. Merkmal Ausprägung
---------- ------ ------------ ------------
0000010001 1 1 (Farbe) 10 (rot)
0000010001 1 2 (Form) 15 (rund)
0000010001 1 4 (Größe) 20 (mittel)
0000010001 1 11 (Gewicht) 2 (mittel)

0000010002 1 1 (Farbe) 10 (rot)
0000010002 1 2 (Form) 15 (rund)
0000010002 1 4 (Größe) 10 (klein)
0000010002 1 11 (Gewicht) 1 (gering)

0000010002 2 1 (Farbe) 10 (rot)
0000010002 2 2 (Form) 15 (rund)
0000010002 2 4 (Größe) 10 (klein)
0000010002 2 11 (Gewicht) 2 (mittel)

0000010003 1 1 (Farbe) 10 (rot)
0000010003 1 2 (Form) 20 (viereckig)
0000010003 1 4 (Größe) 20 (mittel)
0000010003 1 11 (Gewicht) 1 (gering)

Und nun zum SQL-Befehl selbst: den Befehl würde ich dynamisch aufbauen, je nachdem nach wievielen Merk-malen mit Ausprägungen ich suchen muss (zurzeit max. 12 Merkmal); die Artikel-Nummer soll nur zurückgegeben werden, wenn alle hinterlegten Merkmale und Ausprägungen für diesen Artikel zutreffen.

select a.p_prog,
, a.p_modell
, a.p_zuordnung
, count(*)
from sqluser.prod_modell a
group by
a.p_prog
, a.p_modell
, a.p_zuordnung
having count(*) =
(select count(*) from
from sqluser.prod_modell c
where c.p_prog = a.p_prog
and c.p_modell = a.p_modell
and c.p_zuordnung = a.p_zuordnung
and ((c.p_merkmal = 1 and c.p_auspraegung = 10) or
(c.p_merkmal = 2 and c.p_auspraegung = 30) or
(c.p_merkmal = 4 and c.p_auspraegung = 20) or
(c.p_merkmal =11 and c.p_auspraegung = 3)))

Leider läuft der SQL-Befehl für unsere Online-Anwendung zu langsam ( > 15 Sekunden - trotz zahlreiche Indexes), so dass ich den Command gerne optimieren würde - ich weiss leider nur nicht wie?!

Wir setzen übrigens DB2 for VM Server ein.

Im Voraus vielen herzlichen Dank für Hinweise oder Verbesserungsvorschläge.

Gruß
Bunbury


Antworten:


Schreibe eine Antwort

Name:   
E-Mail:  

Thema:

Kommentar:

Optionale Link URL:   
Link Titel:                  
Optionale Image URL:


[ Antworten ] [ Forum ]