我一直在使用c ++并使用sqlite。在python中,我在库中有一个executemany操作,但我正在使用的c ++库没有那个操作。
我想知道executemany操作如何优化查询以使它们更快。
我正在查看sqlite c / c ++ api,看到有两个命令,sqlite3_reset和sqlite3_clear_bindings,可用于清除和重用预准备语句。
这是python对批处理和加速执行查询(至少对于插入)的作用吗?谢谢你的时间。
答案 0 :(得分:2)
executemany
只是绑定参数,执行语句,并在循环中调用sqlite3_reset
。
Python在准备好后不会直接访问该语句,因此这是重用它的唯一方法。 但是,SQLite不需要花费太多时间来准备语句,因此这不太可能对性能产生太大影响。
性能最重要的是在事务中批处理语句; Python试图变得聪明并且to do this automatically(独立于executemany
)。
答案 1 :(得分:0)
我查看了一些相关的帖子,发现了有关如何改进sqlite批量插入性能的详细信息。这些原则可以有效地用于创建executemany函数。
Improve INSERT-per-second performance of SQLite?
最大的改进变化确实是@CL。说,把它变成一个交易。另一篇文章的作者通过使用和重用预备语句并使用一些pragma设置也发现了显着的改进。