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
Sql 使用;“开始交易”;及;“结束交易”;提高性能_Sql_Sqlite - Fatal编程技术网

Sql 使用;“开始交易”;及;“结束交易”;提高性能

Sql 使用;“开始交易”;及;“结束交易”;提高性能,sql,sqlite,Sql,Sqlite,我阅读这篇文章是为了提高SQLite的性能 一个问题是:如果我需要执行以下查询: INSERT INTO INSERT INTO ... INSERT INTO(more than 10000 times) SELECT ... SELECT UPDATE ... 如果我想提高性能,我是否应该在所有代码的开头和结尾插入“开始交易”和“结束交易”,如下所示: BEGIN TRANSACTION INSERT INTO INSERT INTO ... INSERT INTO(more th

我阅读这篇文章是为了提高SQLite的性能

一个问题是:如果我需要执行以下查询:

INSERT INTO
INSERT INTO
...
INSERT INTO(more than 10000 times)

SELECT ...
SELECT 

UPDATE ...
如果我想提高性能,我是否应该在所有代码的开头和结尾插入“开始交易”和“结束交易”,如下所示:

BEGIN TRANSACTION

INSERT INTO
INSERT INTO
...
INSERT INTO(more than 10000 times)

SELECT ...
SELECT 

UPDATE ...
UPDATE ...

END TRANSACTION
或者我应该只为插入操作插入开始/结束事务吗

BEGIN TRANSACTION

INSERT INTO
INSERT INTO
...
INSERT INTO(more than 10000 times)

END TRANSACTION

SELECT ...
SELECT 

UPDATE ...
UPDATE ...

如果插入的是同一个表,插入的列相同,则使用一个插入将显著提高性能,这是因为每个单独的插入命令都包括从数据库来回执行,比实际查询时间长得多

根据服务器的限制(其他进程登录等),我会对插入的行数设置一个限制,例如一次1000行

INSERT INTO table (col1, col2, col3,...) VALUES
{(v1, v2, v3,...), }X 1000;
比以前快多了

{
INSERT INTO table (col1, col2, col3,...) VALUES
(v1, v2, v3,...);
}
X 1000

希望这会有所帮助

您当然可以运行类似于那篇文章的测试-您还可以在它自己的开始/结束以及inserts@Andrew我建议用一笔交易而不是两笔,一笔一笔。谢谢。但这会产生很长的SQL语句吗?SQLite对SQL语句的长度有限制吗?还有“INSERT INTO table(col1,col2,col3,…)VALUES(v1,v2,v3,…);”,我可以使用sqlite3_prepare_v2准备SQL语句,然后将参数绑定到语句。但在表(col1,col2,col3,…)中插入值{(v1,v2,v3,…)}x1000;似乎prepared语句的优势已经不存在了。首先,字符串限制很长,即使1000太长,500也可以。第二,你问了关于性能的问题。。。一次插入更多行可以提高性能。您认为代码的舒适性是另一回事……sqlite查询的最大大小