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

前端之家收集整理的这篇文章主要介绍了sql – 在数据库中存储可重新排序的项目的高效方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我有一张用户收藏表.他们有几百万行.

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

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

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

这是(很可能)不好.

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

解决方法

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

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

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

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

猜你在找的MsSQL相关文章