PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché psycopg2 INSERT impiega così tanto tempo per essere eseguito in loop e come posso accelerarlo?

Sono disponibili più opzioni per velocizzare l'inserimento di dati in blocco.

1.) commit() al termine del ciclo:

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.) Utilizzare gli aiutanti di esecuzione rapida di psycopg2 , come execute_batch() or execute_values() .

3.) Concentrazione di stringhe usando mogrify() :

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

Per un confronto dettagliato di INSERT velocità di esecuzione dai un'occhiata a questo punto di riferimento.