sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför tar psycopg2 INSERT så lång tid att köra i en loop och hur snabbar jag upp det?

Det finns flera alternativ för att påskynda infogning av massdata.

1.) commit() efter att slingan är klar:

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.) Använd psycopg2s hjälpmedel för snabb körning , som execute_batch() or execute_values() .

3.) Strängkoncentration med 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 en detaljerad jämförelse av INSERT exekveringshastigheter ta en titt på denna benchmark.




  1. SQL många-till-många-relation mellan flera tabeller

  2. Varför har alla databaser ett offentligt schema i PostgreSQL?

  3. Användarkontohantering, roller, behörigheter, autentisering PHP och MySQL - Del 3

  4. Unicode (grekiska) tecken lagras i databasen som ??????