Использование «BEGIN TRANSACTION» и «END TRANSACTION» для улучшения производительности - PullRequest
0 голосов
/ 27 сентября 2018

Я читаю сообщение Улучшить производительность SQLite по INSERT-в-секунду? , чтобы улучшить производительность моего 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 голосов
/ 27 сентября 2018

ЕСЛИ 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

надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...