2014-02-11 122 views
2

我讀了刪除操作是緩慢的,我不知道我怎樣才能改善這種檢查。Sqlite的刪除速度令人難以置信 - 如何加快速度?

我有一個是通過每一天,每啓動我需要清理的所有記錄超過6個月,但是當數據庫的增長,我開始有速度問題10-15k行填一個表。接近記錄1暢想,當我運行此命令 - 即使我沒有什麼可刪除 - 軟件掛起分鐘....這是不能接受的:

Using cnn as New SqliteConnection(dbConnection) 
    cnn.Open() 
    dim cmd as New SQLiteCommand(cnn) 
    cmd.CommandText = "DELETE FROM tablename WHERE timecolumn < datetime('now', '-6 months')" 
    rowsUpdated = cmd.ExecuteNonQuery 
End Using 

這導致掛甚至幾分鐘如果沒有記錄被刪除。

我該怎麼辦呢更快,更快?

我工作的.NET Compact Framework 3.5中的WINCE 6

謝謝

+0

如果您使用的SQLite的數據庫這麼大?改變你可以考慮的可能性嗎? – alexis

+0

那麼,設備功能不會退出......所以我更喜歡在可能的情況下不切換到SQL。如果我沒有機會,我會......是Milion SQLITE的大型數據庫嗎?老實說,我不這麼認爲 –

+0

可能重複[如何改善SQLite的性能?](http://stackoverflow.com/questions/1711631/how-do-i-improve-the-performance-of- sqlite) – Alberto

回答

1

有很多事情需要SQLite Optimization調整。我會嘗試通過更改「PRAGMA cache_size」將整個「表名」存儲到內存中。當你刪除它必須重新平衡btree。如果它可以全部在內存中,它會更快。

我還要對「timecolumn」字段添加一個索引。沒有它,刪除就是掃描表中的每條記錄。當實際刪除符合條件的記錄時,它會增加所做的工作,但總體上應該快得多。

如果可能移​​動到一個數據庫,支持partions(如PostgreSQL)和你的數據拆分成使用「timecolumn」的時間段。這使得DB將你的表分成許多子表,真正加快家政和「timecolumn」之間搜索查詢...

+0

謝謝,我讀到索引列會減慢更新/插入,這可能是我的一個問題...無論如何,我會嘗試與PRAGMA變化一起。 –