我正在C#中使用Sqlite,并且有一个非常大的数据库(大约600万条记录)-我使用select rowid from debug_all_table where rule=X
来检索大约10,000行需要更新的列表(使用忽略列-{ {1}})或以最快的方式删除。
最初,我尝试删除行,但是发现这很慢,并且有人说删除是一个缓慢的过程。我改为尝试将忽略列从0更新为1-最初在该行中搜索另一个值-但是,这要花费数小时。
我认为切换到使用索引(在这种情况下为update to ignore=1
)可以加快处理过程,因为它只需查找该rowid
并删除该行,而不必检查数据库中的每一行看看特定列的值是否与我要求删除的10,000行中的每行相匹配-这似乎仍需要几个小时。
我是否正确地认为以下是更新rowid
的最佳方法:
rowid
还是每次仍在搜索每一行并检查update debug_all_table set ignore=1 where rowid=@rowid
?有更有效的方法吗?
我最后的想法是,我可以将不想忽略的表插入临时表中,删除原始表,然后重新插入该表中(它需要在循环中进行类似的更新)。插入最初的600万条记录仅需花费几分钟,因此这似乎可以解决我的问题,因为这永远需要更新/删除操作-但这似乎是我必须丢失的东西,这是最快的方法达到我想要的?