PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Защо psycopg2 INSERT отнема толкова време, за да работи в цикъл и как да го ускоря?

Има множество опции за ускоряване на вмъкването на групови данни.

1.) commit() след завършване на цикъла:

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.) Използвайте помощниците за бързо изпълнение на psycopg2 , като execute_batch() or execute_values() .

3.) Концентрация на низове с помощта на mogrify() :

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

За подробно сравнение на INSERT скоростите на изпълнение, погледнете това бенчмарк.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намерите къде се използва функцията

  2. PostgreSQL - Как да конвертирате секунди в числово поле в ЧЧ:ММ:СС

  3. DISTINCT с два array_agg (или един array_agg с кортеж вътре)?

  4. Създаване на настройка за репликация на PostgreSQL в Debian/Ubuntu

  5. Грешка в LINQ (колоната не съществува) при използване на Entity Framework