连续执行INSERT命令非常慢

时间:2014-07-20 14:27:54

标签: sqlite

我创建了用于在大型现有SQLite数据库中创建和填充表的SQL:

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

然后将其发送到sqlite3。无论我在SQLite提示中读取命令的方式如何(例如“sqlite3 db< create.sql”或“.read create.sql”),执行每一行都接近一秒,即使每行只包含两个字符串。

是什么导致SQLite工作这么慢?我怎样才能加快速度?

2 个答案:

答案 0 :(得分:2)

由于各种原因,

inserts可能会很慢,例如:

  • 表上的索引需要更新
  • 执行表中的
  • 触发器(如果您只是创建表,则不太可能)
  • 服务器上的其他活动
  • 传递到服务器的行数

我建议您将插入内容合并到一个查询中。您可以使用insert . . . select

执行此操作
insert into table(col1, . . . coln)
    select . . .  union all
    select . . .  union all
    . . .;

如果您只是在表中声明列,则可以将所有这些组合成一个语句:

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

答案 1 :(得分:1)

您需要将INSERT语句列表放入事务中:

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

这将大大缩短执行时间。