我需要从25个整数列表中针对3到8个值的唯一组合运行一个进程。这将创建一个具有大约600万条唯一记录/选项的表(假设我限制查询,如下图所示)。.=事实( 25 )/(事实(8)*事实(25-8)).看这里的解释. https://www.khanacademy.org/math/precalculus/x9e81a4f98389efdf:prob-comb/x9e81a4f98389efdf:combinations/v/handshaking-combinations

因为我想要3、4、5、6、7或8的组合--有些记录的第四个值到第八个值都是空条目。
由于多台计算机和处理器可能同时处理这个问题,我需要在MYSQL中存储“作业”列表,并在处理时更新或删除每条记录。
使用@埃格亚尔的解决方案。我可以为我的25个值创建一个表,并在MYSQL中生成所有唯一的组合。
CREATE TABLE UserContacts
(`contact_id` int)
;
INSERT INTO UserContacts
(`contact_id`)
VALUES
(1),
(5),
(6)
;为了得到所有的组合,我可以跑..。
SELECT a.contact_id a, b.contact_id b, ... (I need up 6 of these combinations)
FROM UserContacts a
JOIN UserContacts b ON b.contact_id > a.contact_id在广场上看到它 (更改为MySQL 5.6db以使其工作)。
我的问题是:
started’SMALLINT(5) NULL,‘score TINYINT(3) NULL,added TINYINT(5) NULL,’scoreTINYINT(3) NULL,added TINYINT(1)processed DATETIME NULL,主键(combo\_id);发布于 2021-04-24 03:03:27
如果您正在构建一个具有数百万行的队列,您可能会发现,排队和退队列的开销增加了复杂性,减缓了处理速度。
由于您确切地知道需要处理哪些组合,所以我建议您简单地告诉每个“员工”要处理的组合。
拆分的方法
假设您决定有10个“员工”流程。
id,则计算id的范围以提供给每个工作人员。id没有有用的模式,并且任务列表不断增加,这是很方便的。一个缺点是,如果一个工人在完成20岁之前就死了,那么需要一个单独的“收割”过程将这些行放回等待外派的任务池中。发布于 2021-04-26 13:07:01
要将组合存储在MYSQL数据库中,最好的解决方案是创建两个索引:
combo (
combo\_id INT INT(5) NULL,two SMALLINT(5) NULL,three SMALLINT(5) NULL,four SMALLINT(5) NULL,five SMALLINT(5) NULL,six SMALLINT(5) NULL,seven SMALLINT(5) NULL,eight SMALLINT(5) NULL,processed日期时间,主键(D 17),唯一键(one,d19,three,d21代码,代码,代码,代码,代码>代码>代码>< one >
);简单可行的解决方案..。
https://stackoverflow.com/questions/67229070
复制相似问题