Sqlite删除速度极慢 - 如何加速?

时间:2014-02-11 16:17:01

标签: .net database sqlite delete-row sql-delete

我读到删除操作很慢,我想知道如何改进此检查。

我有一个表每天填充10-15k行,每次启动我需要清理所有超过6个月的记录但是当数据库增长时,我开始遇到速度问题。当我运行此命令时接近1 MILION的记录 - 即使我没有删除 - 软件会挂起几分钟....这是不可接受的:

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

即使没有删除记录,也会导致几分钟的挂起。

如何更快,更快地完成?

我正在为WinCe 6开发.NET compact framework 3.5

谢谢

1 个答案:

答案 0 :(得分:1)

这里有很多要调整的事情SQLite Optimization。我会尝试通过更改“PRAGMA cache_size”将整个“tablename”放入内存中。当你删除它必须重新平衡btree。如果它可以全部存在于内存中它会更快。

我还会在'timecolumn'字段中添加一个索引。如果没有它,删除将扫描表中的每个记录。它会增加在实际删除符合条件的记录时所做的工作,但它总体上应该更快。

如果可能,请移至支持partions的数据库(如postgreSQL),并使用'timecolumn'将数据拆分为时间段。这使得DB将您的表分成许多子表,并且真正加快了在“timecolumn”之间搜索的内务管理和查询......