Es sind halt auch 3.8 Mio records und er macht Stringvergeliche ohne Ende (auch noch mit IN('',...)) ... das kann je nach
DBMS und
DB-Server (hardware) etwas dauern.
Ich würde einfach mal die zeit messen oder mit einem Admin-Tool die Abfrage laufen lassen und sehen, wie lange das alles ohne das eventuelles Client-Gedönse (Delphi, Events) dauert.
Dann würde ich wissen, wo ich ansetzen muss ...