我正在尝试使用以下命令更新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
正在运行时,我的桌面资源似乎没有太大的压力。
答案 0 :(得分:2)
UPDATE
需要启动一个事务,然后保持更新所做的更改的预写日志,然后确保成功,然后将更改写回主表,然后确保所有成功完成......
SELECT
正在阅读然后做一个简单的“在内存中如果”交换每一行的值...所以它必然更快(加上磁盘读取几乎总是比磁盘写入快得多) (SELECT真的不需要))...
答案 1 :(得分:0)
你有没有可用的工具来做"解释"在您的查询:查看您的SQL查询正在使用的索引(如果有)。如果你的sql查询导致超过670K行的全表扫描,那么它可能会很慢。
如果您使用的是ubuntu或类似的Linux发行版,Sqliteman会为您执行此操作。