2014-05-10 52 views
0

我想更新一對夫婦列在使用我的SQLite數據庫:的Python/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

更新需要多長時間?喬恩的答案在性質上是正確的,但是如果你只有大約600行,我希望像這樣的簡單更新比人們能夠察覺的更快。可能還有其他事情正在進行。 –

回答

2

UPDATE ing需要啓動一個事務,然後保留更新會發生的更改的預寫日誌,然後確保成功,然後再將更改寫回主表,然後確保所有這些都成功完成...

SELECT正在閱讀,然後做一個簡單的「內存中,如果」交換每個行的值...所以它必然更快(加上磁盤讀取幾乎總是比磁盤寫入快得多(其中一個SELECT實際上並不需要))...

+0

有道理。謝謝。 – Black

+0

@Blackholify在側面註釋中,比'CASE WHEN ...'更簡單''是使用'COALESCE(col1,0)' –

0

您是否有可用的工具對您的查詢執行「解釋」:查看您的sql的索引(如果有的話)查詢正在使用。如果你的sql查詢導致對670K行進行全表掃描,那麼它可能會很慢。

如果您使用的是Ubuntu或基於類似的Linux發行版,Sqliteman會爲您做到這一點。

+0

是的,但是我已經使用了'CASE WHEN'方法,因爲這可能沒有任何意義在應用程序中更新這些值。 – Black