我读到删除操作很慢,我想知道如何改进此检查。
我有一个表每天填充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
谢谢
答案 0 :(得分:1)
这里有很多要调整的事情SQLite Optimization。我会尝试通过更改“PRAGMA cache_size”将整个“tablename”放入内存中。当你删除它必须重新平衡btree。如果它可以全部存在于内存中它会更快。
我还会在'timecolumn'字段中添加一个索引。如果没有它,删除将扫描表中的每个记录。它会增加在实际删除符合条件的记录时所做的工作,但它总体上应该更快。
如果可能,请移至支持partions的数据库(如postgreSQL),并使用'timecolumn'将数据拆分为时间段。这使得DB将您的表分成许多子表,并且真正加快了在“timecolumn”之间搜索的内务管理和查询......