【发布时间】:2013-02-27 17:16:47
【问题描述】:
所以我有一张用户收藏的表格。它们有几百万行。
目前,它们只有三列:id(pk)、userId 和 someFkRef。 userId 上有一个索引,可以让我快速选择用户的收藏夹。
目前这些是由id 订购的,这实际上只是插入顺序。我们希望让用户有机会重新排序他们的最爱,很可能是通过某种拖放交互。
我的第一个(我怀疑是幼稚的)方法是简单地在userId、order 上添加一个order 列和一个复合索引。然而,经过反思,当用户将他们的项目在列表上移动一段距离时,项目的开始位置和结束位置之间的所有中间行都需要重新计算它们的 order 列,因此也需要重新计算索引。
这(很可能)很糟糕。
在我花了很长时间试图量化到底有多糟糕之前,我想知道是否有更好的基于表格的表示,并且使用我上面描述的各种操作来操作更便宜。
【问题讨论】:
-
我不相信您需要为新字段编制索引。
-
一般情况下,
order byops 需要索引,不是吗? -
@spender 不需要,但是如果您的表行很大并且您获得的结果集很大,使用索引进行排序可能会产生相当少的 I/O。
-
这是个好问题。也许你应该让它更抽象。当您在网页上有一个可重新排序的列表并且您希望将该订单保存到数据库中时,有很多地方。
标签: sql sql-server data-structures