Python / SQLite更新列

时间:2014-05-10 10:27:30

标签: python sqlite

我正在尝试使用以下命令更新SQLite数据库中的几列:

UPDATE db SET Col1 = 0 WHERE Col1 IS NULL;
UPDATE db SET Col2 = 0 WHERE Col2 IS NULL;

然而,这似乎需要很长时间才能更新一列。我已经使用了:

CASE WHEN Col1 IS NULL THEN 0 ELSE Col1 END

在我的SELECT查询中运行得更快,但是有UPDATE方法这么慢的原因是什么? (我的数据库中只有670K行)

注意:我的计算机相当高端,当UPDATE正在运行时,我的桌面资源似乎没有太大的压力。

2 个答案:

答案 0 :(得分:2)

UPDATE需要启动一个事务,然后保持更新所做的更改的预写日志,然后确保成功,然后将更改写回主表,然后确保所有成功完成......

SELECT正在阅读然后做一个简单的“在内存中如果”交换每一行的值...所以它必然更快(加上磁盘读取几乎总是比磁盘写入快得多) (SELECT真的不需要))...

答案 1 :(得分:0)

你有没有可用的工具来做"解释"在您的查询:查看您的SQL查询正在使用的索引(如果有)。如果你的sql查询导致超过670K行的全表扫描,那么它可能会很慢。

如果您使用的是ubuntu或类似的Linux发行版,Sqliteman会为您执行此操作。