使用SQLAlchemy bulk_insert_mappings()时批处理插入是否更快?

2024-10-05 13:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有50万行要用SQLAlchemy插入到PostgreSQL中。在

为了提高速度,我使用session.bulk_insert_mappings()插入它们。在

通常,我会将insert拆分成更小的批以最小化session记账。然而,bulk_insert_mappings()使用dicts,并绕过了许多传统的会话记账。在

如果将insert分解为更小的离散批处理,比如每10K行执行一次insert,我还会看到速度的提高吗?在

如果是这样,我应该在每10K行之后关闭PG事务,还是让它一直打开?在


Tags: sqlalchemysessionpostgresql传统bulk事务速度mappings
1条回答
网友
1楼 · 发布于 2024-10-05 13:24:34

根据我的经验,如果使用INSERT INTO tbl (column1, column2) VALUES (...), (...), ...;,而不是使用executemany,则可以看到性能的显著提高。在本例中,您至少需要在语句级别上对行进行批处理,以确保其正常运行。在

SQLAlchemysupports generating a multi-row ^{} clause for a single ^{} statement,因此您不必手工编写语句。在

在批处理之间提交可能不会对性能产生太大影响,但这样做的原因是不要将打开的事务保留太长时间,这可能会影响服务器上运行的其他事务。在

您还可以尝试使用COPY将其加载到一个临时表中,然后从该表中INSERT。在

相关问题 更多 >

    热门问题