python - 使用 python 和 sqlite3 插入的性能

标签 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 万行,插入 50000 行大约需要 16 分钟,在 2008 macbook 上运行。

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

最佳答案

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

删除索引,然后

PRAGMA synchronous = OFF (or NORMAL)

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

BEGIN TRANSACTION

插入后做

COMMIT

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

关于python - 使用 python 和 sqlite3 插入的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17867605/

相关文章:

python - 在python中将整数转换为大端二进制文件

Python 类 : how to handle "future" instances

python - "error reading PNG header"运行时错误

sql - 如何找到一个数字的范围,其中范围动态来自另一个表?

sqlite - 使用触发器在SQlite中插入多行

python - 正则表达式 python

mysql - 当标识符不是保留字或带有空格时,为什么必须使用反引号?

sql - 数据库设计-如何在同一个表中拥有主键的外键?

SQLite pragma 命令中的 Android Studio 标记错误,<pragma value> 预期,得到 'ON'

ios - 如何在核心数据中高效地插入和获取UUID