【问题标题】:What is the most efficient way to do rows ordering in SQLite table?在 SQLite 表中进行行排序的最有效方法是什么?
【发布时间】: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 子句。像这样明确地管理您的订单是很麻烦的。

标签: sql database sqlite


【解决方案1】:

我通过将 Ord 列从我的主表 MyTable(它有 21 个其他列!)中移出到只有两列的新 Ordering 表中解决了这个问题:Ordering.MyTableId 和 Ordering.Ord。 此新表上的所有操作(包括完全清除和重新插入 4000 行)在 2 秒内执行!

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多