加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在数据库中存储可重新排序的项目的高效方法

发布时间:2020-12-12 08:40:19 所属栏目:MsSql教程 来源:网络整理
导读:所以我有一张用户收藏表.他们有几百万行. 目前,它们只有三列:id(pk),userId和someFkRef. userId有一个索引,可以让我快速选择用户的收藏. 目前,这些是按照id进行排序,这只是插入顺序.我们希望为用户提供重新排序收藏夹的机会,最有可能通过某种拖放式互动. 我
所以我有一张用户收藏表.他们有几百万行.

目前,它们只有三列:id(pk),userId和someFkRef. userId有一个索引,可以让我快速选择用户的收藏.

目前,这些是按照id进行排序,这只是插入顺序.我们希望为用户提供重新排序收藏夹的机会,最有可能通过某种拖放式互动.

我的第一个(我怀疑天真的)方法是简单地在userId上添加一个订单列和一个复合索引.然而,反思后,当用户将其项目移动到列表上一些距离时,项目的起始位置和结束位置之间的所有中间行将需要重新计算其订单列,因此也将需要索引.

这是(很可能)不好.

在我花费时间尝试量化完全不好之前,我想知道是否有更好的基于表的表示,使用上面描述的各种操作来操作它更便宜.

解决方法

对于拖放式互动,更好的打赌是一个优先事项.您将从优先级开始为1,2,3等等,就像排序顺序一样.

但是,用户希望将项目5移到1到2之间.给它的价值1.5.没有其他价值需要改变.索引更新负责其余的操作.

为了使其工作,优先级需要作为浮点数存储.这可能是一个问题.此外,足够大的更改可能会导致浮点限制.所以,如果一个用户尝试取最后一个元素并将其插入到前两个元素之间,那么他/他可以离开它几十次左右.

您可以通过一个过程定期重新分配一个(或所有用户,如果批处理)从1开始重新分配号码的过程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读