sql >> データベース >  >> RDS >> PostgreSQL

psycopg2 INSERTがループで実行されるのに非常に長い時間がかかるのはなぜですか?また、どうすれば高速化できますか?

    バルクデータの挿入を高速化するための複数のオプションがあります。

    1.)commit() ループが終了した後:

    座標内のeleの
    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. MySQLを使用したタイムラインの変更のカウント

    2. これらのテーブル値パラメーターを強く入力する

    3. iOS用CloudFirestore入門

    4. mysqlクエリからランダムな行を出力します