2017-12-06 2 views
0

Ich muss regelmäßig Daten in Tabelle 1 einfügen, die Fremdschlüsselbezug zu Tabelle 2 enthält. Und Tabelle # 2 ist ziemlich groß - etwa 200.000 Zeilen. Ich versuche, Zeilen zu überprüfen, die durch einfaches Entfernen dieser Zeilen in Tabelle # 1 für Fremdschlüssel eingefügt werden müssen, die definitiv nicht eingesetzt werden kann, und meine Abfrage sieht wie folgt aus:Schnell einfügen in Tabelle mit Fremdschlüsseleinschränkungen

DELETE FROM temp_table1 
WHERE temp_table1.fk NOT IN (SELECT id FROM table2) AND 
temp_table1.id_d IS NOT NULL; 

Das Problem ist, diese Methode ist gaaanz langsam :(so gibt es eine „richtige“ Methode Zeilen in einer solchen Situation einfügen?

ich verwende Python3, Postgresql und psycopg2, wenn es darauf ankommt.

+0

'... wenn es darauf ankommt.'Nein, das sollte keine Rolle spielen. Was * macht * zählt: Ihre Tabellendefinitionen einschließlich Schlüssel und Indizes. – wildplasser

+0

@wildplasser Ok, table1 hat Feld "fk", das den Primärschlüssel "id" aus table2 referenziert, und Tabelle2 hat auch einen Index auf "id" Feld. –

Antwort

0

Sie brauchen nicht die delete Schritt insert direkt in statt:

insert into table1 
select t1.* 
from 
    temp_table1 t1 
    inner join 
    table2 t2 on t1.fk = t2.id 
where t1.id_d is not null 
Verwandte Themen