• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Select sher langsam, optimiereung möglich?

csigg

Neues Mitglied
Hallo,
ich hab folgendes SQL-Statement:
HTML:
select artnum from ARTIKEL
where
GEAEND < '2010-03-20' AND
( select count(*) from JOURNALPOS where ARTNUM = ARTIKEL.ARTNUM ) < 1 AND
MENGE_AKT = 0
Wenn die Ausgabe testweise funktioniert, will ich es zu einem DELETE umbauen:
[HTMLdelete from ARTIKEL
where
GEAEND < '2010-03-20' AND
( select count(*) from JOURNALPOS where ARTNUM = ARTIKEL.ARTNUM ) < 1 AND
MENGE_AKT = 0[/HTML]

Das Problem ist, ich musste das Select nach 9 Stunden abbrechen weil es zu lange gedauert hat.
Allerdings wüsste ich nicht, wie ich das optimieren könnte. Das Sub-Select bekomm ich ja nicht raus, oder?

Mal schnell noch die Logik in Textform:
Ich möchte alle Artikelnummern, welche das letzte mal vor dem 20.03.2010 geändert wurden, bei welchen die Menge = 0 ist und welche noch nie verkauft wurden, also wo kein Satz in der Tabelle JOURNALPOS vorhanden ist.
Hat von euch da jemand noch ne Idee?
 
Werbung:
Code:
SELECT a.ARTNUM FROM ARTIKEL a, JOURNALPOS j WHERE a.GEAEND < '2010-03-20' AND a.ARTNUM <> j.ARTNUM AND a.MENGE_AKT = 0;

Vielleicht? :???:
 
Wäre auch eine möglichkeit, ja... Danke!
Ich hab jetzt allerdings mal meine Kopf noch bisschen angestrengt und bin auf die Idee des Index (Feld Artbum) in der Tabelle JOURNALPOS gekommen.
Ausführungszeit ca. 10 Sekunden :)
 
Werbung:
Statt eines Sub-Selects geht (fast) immer ein JOIN, der im Normalfall (fast) immer deutlich schneller ist:


select a.artnum from ARTIKEL AS a LEFT JOIN JOURNALPOS AS j ON A.ARTNUM = j.ARTNUM where a.GEAEND < '2010-03-20' AND a.MENGE_AKT = 0 AND j.ARTNUM IS NULL

HTH
Alex
 
Zurück
Oben