sql >> Database >  >> RDS >> PostgreSQL

Waarom duurt het zo lang voordat psycopg2 INSERT in een lus draait en hoe kan ik het versnellen?

Er zijn meerdere opties om het invoegen van bulkgegevens te versnellen.

1.) commit() nadat de lus is voltooid:

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.) Gebruik de snelle uitvoeringshelpers van psycopg2 , zoals execute_batch() or execute_values() .

3.) Stringconcentratie met behulp van mogrify() :

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

Voor een gedetailleerde vergelijking van INSERT uitvoeringssnelheden bekijk dit benchmark.




  1. Hoe mysqli te laten werken met DELIMITER's in SQL-statements?

  2. De Optimizer in Oracle Database 19c

  3. Ontdek vrije ruimte op tablespace

  4. Wat is de maximale lengte van gegevens die ik in een BLOB-kolom in MySQL kan plaatsen?