我一直在使用 c++ 并使用 sqlite。在 python 中,我在库中有一个 executemany 操作,但我使用的 c++ 库没有该操作。
我想知道 executemany 操作如何优化查询以使其更快。
我正在查看 sqlite c/c++ api 并看到有两个命令 sqlite3_reset 和 sqlite3_clear_bindings 可用于清除和重用准备好的语句。
这是 python 对执行许多查询(至少对于插入)所做的批处理和加速操作吗?谢谢你的时间。
我一直在使用 c++ 并使用 sqlite。在 python 中,我在库中有一个 executemany 操作,但我使用的 c++ 库没有该操作。
我想知道 executemany 操作如何优化查询以使其更快。
我正在查看 sqlite c/c++ api 并看到有两个命令 sqlite3_reset 和 sqlite3_clear_bindings 可用于清除和重用准备好的语句。
这是 python 对执行许多查询(至少对于插入)所做的批处理和加速操作吗?谢谢你的时间。
executemany
sqlite3_reset
只是在循环中绑定参数、执行语句和调用。
Python 不会让您在准备好语句后直接访问它,因此这是重用它的唯一方法。但是,SQLite 不会花费太多时间来准备语句,因此这不太可能对性能产生太大影响。
性能最重要的是在事务中批处理语句;Python 试图变得聪明并自动(独立于)做到这一点executemany
。
我查看了一些相关的帖子,发现以下内容非常详细地介绍了提高 sqlite 批量插入性能的方法。这些原则可以有效地用于创建 executemany 函数。
最大的改进变化确实是@CL。说,把这一切都变成了一笔交易。另一篇文章的作者还发现通过使用和重用准备好的语句以及使用一些 pragma 设置有了显着的改进。