gpt4 book ai didi

sqlite - 我们应该在 SQLite 事务内部还是外部绑定(bind)参数?

转载 作者:行者123 更新时间:2023-12-03 17:40:33 24 4
gpt4 key购买 nike

我对使用事务来提高性能感兴趣。

这是我目前正在做的过程:

* ~~~BEGIN TRANSACTION~~~
* Instance a command object and set the command text.
* Prepare command text so parameters can be added.
* In a loop, I set the values of said parameters and execute the command.
* ~~~COMMIT~~~

我这样做是因为,据我所知,当你准备一个语句时,你正在与 SQLite 引擎通信,所以也许在事务中包含它会以某种方式有所帮助??? (我只是猜测。)

.

问题: 我应该将其更改为以下流程吗?

* Instance a command object and set the command text.
* Prepare command text so parameters can be added.
* ~~~BEGIN TRANSACTION~~~
* In a loop, I set the values of said parameters and execute the command.
* ~~~COMMIT~~~

我问这个问题是因为,也许让交易仅包含一系列同质命令似乎会更好??? (再说一遍,我不知道;我只是猜测。)

最佳答案

BEGIN 中准备语句没有任何优势(下面有警告)。

BEGIN 之外准备语句有一个小优势,因为事务的时间会稍微短一些(下面有第二个警告),从而允许更多的并发性。

无论哪种情况,请务必在重新使用语句之前重置该语句,并在关闭数据库之前完成该语句。

注意事项 1:如果数据库架构发生更改,则需要重新准备语句。如果您使用推荐的sqlite3_prepare_v2(),那么 SQLite 将为您执行此操作。您可以通过在事务内进行准备来避免架构更改,但请注意,您需要使用 BEGIN IMMEDIATE 来确保数据库已锁定。

注意事项 2:由于您使用 BEGIN 而不是 BEGIN IMMEDIATE,因此直到事务的第一个语句被执行后,数据库才会真正获得锁定。因此,除非您使用 BEGIN IMMEDIATE,否则并没有真正的并发优势。

在事务之外准备语句还有其他优点,例如,您可以在多个事务中使用它们,而无需多次准备。然而,维持其生命周期的逻辑变得更加复杂/分散。

关于sqlite - 我们应该在 SQLite 事务内部还是外部绑定(bind)参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16725244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com