【发布时间】:2015-12-07 14:22:50
【问题描述】:
我需要在 SQLite 表中保持大约 4000 行的顺序。行的插入和删除需要快速操作。
当前解决方案:我有整数列 Ord。在新行中的每个插入 Ord 后,只需获取下一个整数,因此无需更改旧行,但在删除后,有时我需要重新填充几乎所有 4000 行,这需要太长时间(约 10 秒)。为了更新本专栏,我使用此解决方案 Update SQLite table with values from 1 to N
有没有更好的方法来维持秩序?
【问题讨论】:
-
如果您只是在寻找ordering,为什么需要更新现有行?大概顺序仍然是正确的,对吧?可能会跳过一些数字。
-
是的,但 c# 逻辑只能获取连续值 - 它假定此列中的连续值。在这一点上改变这个逻辑会很昂贵。
-
您是否要缩小
Ord列?基本上,在删除记录后重新编号所有记录。 -
如果您总是删除一行(或已知数量的行),您可以随时执行
UPDATE table SET Ord=Ord-1 WHERE Ord>@DeletedOrdNumber或类似的操作。可以想象这比在临时表中重新排序整个表要少得多。 -
从长远来看,正确的解决方案可能是简单地将插入日期时间列添加到表中,在其上放置索引,并在查询时使用
ORDER BY子句。像这样明确地管理您的订单是很麻烦的。