PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum dauert es so lange, bis psycopg2 INSERT in einer Schleife läuft, und wie kann ich es beschleunigen?

Es gibt mehrere Optionen, um das Einfügen von Massendaten zu beschleunigen.

1.) commit() nachdem die Schleife beendet ist:

for ele in coordinates:
    cursor.execute('INSERT INTO gmaps (source_latitude, source_longitude, destination_latitude, destination_longitude) VALUES (%s, %s, %s, %s)', (ele[0], ele[1], ele[2], ele[3])))
conn.commit()

2.) Verwenden Sie die schnellen Ausführungshelfer von psycopg2 , wie execute_batch() or execute_values() .

3.) Stringkonzentration mit mogrify() :

dataText = ','.join(cur.mogrify('(%s,%s,%s,%s)', row) for ele in coordinates)
cur.execute('INSERT INTO gmaps VALUES ' + dataText)
cur.commit()

Für einen detaillierten Vergleich von INSERT Ausführungsgeschwindigkeiten siehe hier Benchmark.