我正在对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上运行。
这听起来合理,还是有些事情发生了?
答案 0 :(得分:6)
据我所知,性能不佳的主要原因是浪费时间来提交许多SQLite事务。怎么办?
删除索引,然后
PRAGMA synchronous = OFF (or NORMAL)
插入N行的块(定义N,尝试N = 5000以启动)。 在插入块之前执行
BEGIN TRANSACTION
插入后
COMMIT