我有50万行要用SQLAlchemy插入到PostgreSQL中。在
为了提高速度,我使用session.bulk_insert_mappings()
插入它们。在
通常,我会将insert拆分成更小的批以最小化session
记账。然而,bulk_insert_mappings()
使用dicts
,并绕过了许多传统的会话记账。在
如果将insert分解为更小的离散批处理,比如每10K行执行一次insert,我还会看到速度的提高吗?在
如果是这样,我应该在每10K行之后关闭PG事务,还是让它一直打开?在
根据我的经验,如果使用
INSERT INTO tbl (column1, column2) VALUES (...), (...), ...;
,而不是使用executemany
,则可以看到性能的显著提高。在本例中,您至少需要在语句级别上对行进行批处理,以确保其正常运行。在SQLAlchemysupports generating a multi-row ^{} clause for a single ^{} statement ,因此您不必手工编写语句。在
在批处理之间提交可能不会对性能产生太大影响,但这样做的原因是不要将打开的事务保留太长时间,这可能会影响服务器上运行的其他事务。在
您还可以尝试使用
COPY
将其加载到一个临时表中,然后从该表中INSERT
。在相关问题 更多 >
编程相关推荐