Ich würde das prüfen, ob es den Datensatz schon gibt und das Einfügen bzw. ändern über eine Stored Procedure machen. Dazu sämtliche Aufrufe in einer Transaction. Ein Beispiel findest du
hier.
Das muss allerdings dein Geschwindigkeitsproblem nicht lösen. Ich sehe ein weiteres Problem beim
RAM. Ist das voll muss der Rechner die ganze Zeit hin und her pagen. Also ggf. einfach mal auf nem Rechner mit mehr
RAM ausprobieren.