Hi!
Ich habe derzeit ein kleines Laufzeit-Problem mit einem Delete. Vielleicht kann mir jemand von euch einen Tuning-Tipp geben:
Eine Tabelle („Bestand“) enthält ca. 200.000 Datensätze mit einem Primary Key auf „ID“.
Eine zweite Tabelle („To_Delete“) enthält die IDs der aus „Bestand“ zu löschenden Datensätze (ca. 50.000 Datensätze, nicht indiziert).
Nun soll ein bestimmter Nummernkreis aus „Bestand“ gelöscht werden. Das SQL dazu sieht so aus:
Delete from Bestand
where ID between 4000 and 20000
and ID in
(Select Del_ID from To_Delete
where Del_ID between 4000 and 20000)
Das SQL braucht endlos lange (ohne die „between“-Klauseln steigt die Datenbank sogar aus!). Kann man das SQL optimieren? Nutzt eine Indizierung der To_Delete bzw. ein order by im Select auf die To_Delete?
Danke schon mal für jeden Tipp!
Heinrich