выполнение команд INSERT в строке очень медленно

Вопрос:

Я создал SQL для создания и заполнения таблицы в большой существующей базе данных SQLite:

CREATE TABLE ...;
INSERT INTO ...;
INSERT INTO ...;
...

Затем отправили его в sqlite3. Независимо от того, каким образом я читаю команды (например, “sqlite3 db <create.sql” или “.read create.sql” в приглашении SQLite), выполнение каждой строки приближалось к секунде, хотя каждая строка состояла только из двух строки.

Что заставляет SQLite работать так медленно? Как я могу ускорить его?

Лучший ответ:

Вы должны поместить список операторов INSERT в транзакцию:

BEGIN TRANSACTION;
CREATE TABLE ...;
INSERT INTO ...;
INSERT INTO ...;
...
COMMIT;

Это значительно сократит время выполнения.

Ответ №1

inserts могут быть медленными по целому ряду причин, таких как:

  • индексы таблицы должны быть обновлены
  • триггеры находятся на столе (маловероятно, если вы просто создаете таблицу)
  • другая деятельность на сервере
  • количество строк, передаваемых на сервер

Я бы рекомендовал объединить вставки в один запрос. Вы можете сделать это, используя insert... select insert... select insert... select:

insert into table(col1, . . . coln)
select . . .  union all
select . . .  union all
. . .;

Если вы просто объявляете столбцы в таблице, вы можете объединить все это в один оператор:

create table xxx as
select . . .  union all
select . . .  union all
. . .;

Оцените статью
TechArks.Ru
Добавить комментарий