【问题标题】:How does executemany() workexecutemany() 是如何工作的
【发布时间】:2014-10-15 04:07:10
【问题描述】:

我一直在使用 c++ 并使用 sqlite。在 python 中,我在库中有一个 executemany 操作,但我使用的 c++ 库没有该操作。

我想知道 executemany 操作如何优化查询以使其更快。

我查看了 sqlite c/c++ api,发现有两个命令,sqlite3_reset 和 sqlite3_clear_bindings,可用于清除和重用准备好的语句。

这就是 python 用来批处理和加速执行许多查询(至少对于插入)的作用吗?感谢您的宝贵时间。

【问题讨论】:

  • 在事务中包装一系列插入语句将比清除绑定更快地提高性能。如果你想知道executemany 是如何工作的,请查看它的源代码。

标签: sqlite executemany


【解决方案1】:

executemany只是在循环中绑定参数、执行语句、调用sqlite3_reset。

Python 不会让您在准备好语句后直接访问它,因此这是重用它的唯一方法。 但是,SQLite 不会花费太多时间来准备语句,因此这不太可能对性能产生太大影响。

性能最重要的是在事务中批处理语句; Python 试图变得聪明和to do this automatically(独立于executemany)。

【讨论】:

  • 我没有意识到事务中的批处理提高了速度。这是非常有用的信息,谢谢。
【解决方案2】:

我查看了一些相关的帖子,发现以下内容非常详细地介绍了提高 sqlite 批量插入性能的方法。这些原则可以有效地用于创建 executemany 函数。

Improve INSERT-per-second performance of SQLite?

最大的改进变化确实是@CL。说,把这一切都变成了一笔交易。另一篇博文的作者还发现通过使用和重用准备好的语句以及使用一些 pragma 设置有显着的改进。

【讨论】:

    猜你喜欢
    • 2014-08-19
    • 2015-07-02
    • 1970-01-01
    • 2017-07-24
    • 2016-11-13
    • 2017-10-11
    • 2021-10-13
    • 2011-02-24
    • 2013-11-16
    相关资源
    最近更新 更多