6

我正在对 SQLite3 数据库进行大批量插入,我试图了解我应该期待什么样的性能与我实际看到的性能。

我的表如下所示:

cursor.execute(
            "CREATE TABLE tweets(
             tweet_hash TEXT PRIMARY KEY ON CONFLICT REPLACE,
             tweet_id INTEGER,
             tweet_text TEXT)"
        )

我的插入看起来像这样:

cursor.executemany("INSERT INTO tweets VALUES (?, ?, ?)", to_write)

哪里to_write是元组列表。

目前,数据库中有大约 1200 万行,插入50 000行大约需要 16 分钟,在 2008 年的 macbook 上运行。

这听起来合理吗,还是发生了什么严重的事情?

4

1 回答 1

8

据我了解,性能不佳的主要原因是您浪费时间提交许多 SQLite 事务。该怎么办?

删除索引,然后

PRAGMA synchronous = OFF (or NORMAL)

插入 N 行的块(定义 N,尝试 N=5000 开始)。在插入块之前做

BEGIN TRANSACTION

插入后做

COMMIT

另见http://www.sqlite.org/faq.html#q19

于 2013-07-25T23:26:15.837 回答