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

pyodbcを使用してMSSQLServerへの一括挿入を高速化する方法

    別の回答へのコメントに記載されているように、T-SQL BULK INSERT コマンドは、インポートするファイルがSQL Serverインスタンスと同じマシン上にあるか、SQLServerインスタンスが読み取ることができるSMB/CIFSネットワークの場所にある場合にのみ機能します。したがって、ソースファイルがリモートクライアント上にある場合には適用できない可能性があります。

    pyodbc 4.0.19は、その場合に役立つ可能性のあるCursor#fast_executemany機能を追加しました。 fast_executemany デフォルトでは「オフ」であり、次のテストコード...

    cnxn = pyodbc.connect(conn_str, autocommit=True)
    crsr = cnxn.cursor()
    crsr.execute("TRUNCATE TABLE fast_executemany_test")
    
    sql = "INSERT INTO fast_executemany_test (txtcol) VALUES (?)"
    params = [(f'txt{i:06d}',) for i in range(1000)]
    t0 = time.time()
    crsr.executemany(sql, params)
    print(f'{time.time() - t0:.1f} seconds')
    

    ...テストマシンで実行するのに約22秒かかりました。 crsr.fast_executemany = Trueを追加するだけです ...

    cnxn = pyodbc.connect(conn_str, autocommit=True)
    crsr = cnxn.cursor()
    crsr.execute("TRUNCATE TABLE fast_executemany_test")
    
    crsr.fast_executemany = True  # new in pyodbc 4.0.19
    
    sql = "INSERT INTO fast_executemany_test (txtcol) VALUES (?)"
    params = [(f'txt{i:06d}',) for i in range(1000)]
    t0 = time.time()
    crsr.executemany(sql, params)
    print(f'{time.time() - t0:.1f} seconds')
    

    ...実行時間を1秒強に短縮しました。



    1. PostgreSQLシーケンスのHibernateの使用は、シーケンステーブルに影響しません

    2. SQLデータ操作言語

    3. ステップバイステップR12.2.6VirtualBoxへのEBSのインストール

    4. MySQLまたはMariaDBデータベースをエクスポートする