首页 > 解决方案 > 更新 rowid 是更新大型 sqlite 数据库的最快方法吗?

问题描述

我在 C# 中使用 Sqlite 并且有一个非常大的数据库(大约 600 万条记录) - 我曾经select rowid from debug_all_table where rule=X检索过大约 10,000 行的列表,我需要更新(使用忽略列 - update to ignore=1)或以最快的方式删除。

最初我尝试删除行,但发现这非常慢,并且发现人们说删除是一个缓慢的过程。我改为尝试将忽略列从 0 更新为 1 - 最初搜索行中的另一个值 - 但是,这需要几个小时。我认为切换到使用索引(rowid在这种情况下)会加快进程,因为它会简单地查找rowid并删除该行,而不必检查数据库中的每一行以查看特定列的值是否匹配我要求删除 10,000 行中的每一行 - 这似乎仍然需要几个小时。

我是否认为以下是更新的最佳方式rowid

update debug_all_table set ignore=1 where rowid=@rowid

或者这是否仍然每次都搜索每一行并检查rowid?有没有更有效的方法来做到这一点?

我最后的想法是,我可以将不想忽略的那些插入到临时表中,删除原始表,然后重新插入(它需要在循环中进行类似的更新)。插入最初的 600 万条记录会在几分钟内完成,所以这似乎可以解决我的问题,因为它只是需要永远的更新/删除 - 但感觉我必须遗漏一些东西才能成为最快的方法实现我想要的?

标签: c#sqlite

解决方案


推荐阅读