首页 > 解决方案 > 使用“BEGIN TRANSACTION”和“END TRANSACTION”来提高性能

问题描述

我正在阅读文章提高 SQLite 的每秒插入性能?提高我的 SQLite 的性能。

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

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

SELECT ...
SELECT 

UPDATE ...

如果我想提高性能,我是否应该在所有代码的开头和结尾插入“BEGIN TRANSATION”和“END TRANSATION”,如下所示:

BEGIN TRANSACTION

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

SELECT ...
SELECT 

UPDATE ...
UPDATE ...

END TRANSACTION

或者我应该只为插入操作插入 BEGIN/END TRANSACTION 吗?

BEGIN TRANSACTION

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

END TRANSACTION

SELECT ...
SELECT 

UPDATE ...
UPDATE ...

标签: sqlsqlite

解决方案


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

根据服务器的限制(登录的其他进程等),我会设置插入行数的限制,例如一次 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

希望有帮助


推荐阅读