Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们应该在SQLite事务内部还是外部绑定参数?_Sqlite_Transactions - Fatal编程技术网

我们应该在SQLite事务内部还是外部绑定参数?

我们应该在SQLite事务内部还是外部绑定参数?,sqlite,transactions,Sqlite,Transactions,我对使用事务来提高性能感兴趣 这是我目前正在做的过程: 我这样做是因为,据我所知,当您准备一个语句时,您正在与SQLite引擎进行通信,所以在事务中包含这一点可能在某种程度上有所帮助???(我只是在猜测。) 问题:我是否应该将其更改为以下过程 我这样问是因为,让事务只包含一系列同质命令似乎更好???(同样,我也不知道;我只是猜测。)在BEGIN中准备语句没有任何好处(下面有警告) 在BEGIN之外准备语句有一点好处,因为事务的时间会稍微短一些(下面有第二个警告),因此允许更多的并发性 在这两种

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

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

我这样做是因为,据我所知,当您准备一个语句时,您正在与SQLite引擎进行通信,所以在事务中包含这一点可能在某种程度上有所帮助???(我只是在猜测。)

问题:我是否应该将其更改为以下过程


我这样问是因为,让事务只包含一系列同质命令似乎更好???(同样,我也不知道;我只是猜测。)

BEGIN
中准备语句没有任何好处(下面有警告)

BEGIN
之外准备语句有一点好处,因为事务的时间会稍微短一些(下面有第二个警告),因此允许更多的并发性

在这两种情况下,请确保在重用语句之前重置该语句,并在关闭数据库之前完成该语句

警告1:如果数据库模式发生更改,则需要重新准备语句。如果使用推荐的
sqlite3\u prepare\u v2()
,则SQLite将为您执行此操作。您可以通过在事务内部进行准备来避免架构更改,但请注意,您需要使用
beginimmediate
来确保数据库已锁定

警告2:由于您使用的是
BEGIN
而不是
beginimmediate
,因此在事务的第一条语句被步进之前,数据库锁实际上不会被执行。因此,除非使用
beginimmediate
,否则实际上没有并发优势

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

* ~~~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~~~
* 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~~~