我正在阅读帖子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 ...
答案 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
希望有帮助