使用“ BEGIN TRANSACTION”和“ END TRANSACTION”改善性能

时间:2018-09-27 09:33:25

标签: sql sqlite

我正在阅读帖子Improve INSERT-per-second performance of 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 ...

1 个答案:

答案 0 :(得分:1)

如果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

希望有帮助