首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何最好地存储和索引MYSQL中多个整数的所有唯一组合?

如何最好地存储和索引MYSQL中多个整数的所有唯一组合?
EN

Stack Overflow用户
提问于 2021-04-23 11:23:41
回答 2查看 142关注 0票数 0

我需要从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中生成所有唯一的组合。

代码语言:javascript
复制
CREATE TABLE UserContacts
    (`contact_id` int)
;
    
INSERT INTO UserContacts
    (`contact_id`)
VALUES
    (1),
    (5),
    (6)
;

为了得到所有的组合,我可以跑..。

代码语言:javascript
复制
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以使其工作)。

我的问题是:

  1. 如何最好地将这些数据添加到一个新的MYSQL表中,该表正确地对这些组合进行索引,以便我可以从这个表中找到和更新数百万个组合的记录?
  2. 创建复合主键(第一个主键、第二个主键、第三个主键)是否更快?如果是,select或查询将如何查找复合解决方案?等。 创建表‘组合’( 'combo_id‘INT (5) NULL,'firstval’SMALLINT(5) NULL,'secondval‘SMALLINT(5) NULL,'thirdval’SMALLINT(5) NULL,‘started’SMALLINT(5) NULL,‘score TINYINT(3) NULL,added TINYINT(5) NULL,’scoreTINYINT(3) NULL,added TINYINT(1)processed DATETIME NULL,主键(combo\_id);
EN

回答 2

Stack Overflow用户

发布于 2021-04-24 03:03:27

如果您正在构建一个具有数百万行的队列,您可能会发现,排队和退队列的开销增加了复杂性,减缓了处理速度。

由于您确切地知道需要处理哪些组合,所以我建议您简单地告诉每个“员工”要处理的组合。

拆分的方法

假设您决定有10个“员工”流程。

  • 如果有一个主要是紧凑的id,则计算id的范围以提供给每个工作人员。
  • 将0到9分配给10个工作人员,然后让一个工作人员执行id % 10,以查看它是否是要处理的任务。
  • 工作抓取20个未分配的ids,并将这些行分配给自己。如果id没有有用的模式,并且任务列表不断增加,这是很方便的。一个缺点是,如果一个工人在完成20岁之前就死了,那么需要一个单独的“收割”过程将这些行放回等待外派的任务池中。
票数 1
EN

Stack Overflow用户

发布于 2021-04-26 13:07:01

要将组合存储在MYSQL数据库中,最好的解决方案是创建两个索引:

  1. 主键
  2. 跨所有组合值的第二个唯一索引如下: 创建表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),唯一键(oned19,three,d21代码,代码,代码,代码,代码>代码>代码>< one > );

简单可行的解决方案..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67229070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档