使用python和sqlite3插入的性能

时间:2013-07-25 19:57:51

标签: python sql sqlite

我正在对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上运行。

这听起来合理,还是有些事情发生了?

1 个答案:

答案 0 :(得分:6)

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

删除索引,然后

PRAGMA synchronous = OFF (or NORMAL)

插入N行的块(定义N,尝试N = 5000以启动)。 在插入块之前执行

BEGIN TRANSACTION
插入后

COMMIT

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