c# - 更新 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 万条记录会在几分钟内完成,所以这似乎可以解决我的问题,因为它只是需要永远的更新/删除 - 但感觉我必须遗漏一些东西才能成为最快的方法实现我想要的?
解决方案
推荐阅读
- python - 如何在 Python 中创建生成不同类的工厂方法?
- url - 如何最小化 Soundcloud 的曲目 URL 长度?
- asp.net-core-webapi - .netcore api 的 ADAL 与 MSAL
- websocket - Jmeter Websocket:等待响应中的所有帧
- google-sheets - Google Sheets V4 API - 按搜索条件查询 Google Sheets
- visual-studio - 尝试添加对 Visual Studio 项目的引用突然引发异常
- ruby-on-rails - Rails 单个包含多个类
- kubernetes - 为什么 Dask 客户端说我的集群具有比实际可用总数更多的内核和内存?
- python - 为什么这段代码在 for 循环中只使用 x 而不是 x 和 y?
- swift - 在 Array.first 中隐式展开选项