我知道我的问题可能没有“完美”的解决方案(这听起来像是背包或垃圾箱问题的一种变体),但这是我的情况:

我想将一个SQL数据库表的列表分成大小相等的n个堆(假设为7个)(这样,我就可以在整个一周内大致相等地分配一些维护任务)。

假设我有100张 table (可以更高或更低,但不太可能高于5000张),范围从1到10,000,000(当然,较大的表很少见)。

我最初的想法是按字母顺序(伪随机)对表进行排序,然后从头开始遍历,当总数超过Sum(Size)/7时,移至下一组。对于某些数据库,这可能会很好地工作,但是如果两个巨型表彼此相邻,那么这将导致非常不平等的组。 (这听起来似乎不太可能,请考虑两个巨大的表Account_History和Account_History_Archive)。

是否有任何公认的技术可以为各种源数据提供“良好”的结果?我倾向于采用一种更简单的技术,而不是一种更为精确的分组(如果维护在某些日子比其他日子稍长一些,那没什么大不了的)。

最佳答案

如何按大小对表进行排序,然后将每个表放到当前总行数最少的那一天呢?这意味着最大的7张赌 table 将首先在几天中散布。然后,第8位大将与前7位中的最小排在一起,依此类推。您将继续以最少的工作量来完成一天的工作。

小引用表最终可以最终结束的地方可能并没有多大区别。

您可以发明这种方法不好的方案,但是我希望它在实践中不会太复杂。

关于sql - 将数字列表分为大致相等的总数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4151457/

10-10 14:35