我有一个庞大的数据库,其中大多数字段都是长字符串(DNA序列)。目前它约有5亿行。对于我的初始表,我只希望所有5亿行实现到这个数据结构中。索引获得500万行数据库上的唯一字段mysql
Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Null
0 | PRIMARY | 1 | prim_id | A | 2654074 | NULL | NULL |
1 | cdr3seq | 1 | cdr3seq | A | 2654074 | NULL | NULL |
1 | cdr3aa | 1 | cdr3aa | A | 2654074 | NULL | NULL |
1 | v_gene | 1 | vg | A | 53081 | NULL | NULL |
1 | d_gene | 1 | dg | A | 46562 | NULL | NULL |
1 | j_gene | 1 | jg | A | 14269 | NULL | NULL |
1 | donor | 1 | donor | A | 1092 | NULL | NULL |
1 | seq_id | 1 | seq_id | A | 2654074 | NULL | NULL |
1 | seq | 1 | seq | A | 2654074 | NULL | NULL |
它们都是B树和同一个表(忽略基数 - 这是从上传过程中取的)。我只需使用auto_increment主标识(prim_id)即可轻松上传此表。但是当我添加索引时,需要永远写出大量的临时表。另一方面,如果我先设计表格,则需要永久上传。有没有一些SQL服务器选项我错过了?我目前正在运行Innodb引擎。正在等待索引不可避免的内容?我必须这样做的原因是因为所有这些列最终都会在某个时候分组。例如,我想从此表中创建另一个表,这些表只是唯一的seq
,但如果没有首先对此表进行索引,则无法执行此操作。我是否以正确的方式去做这件事?
另外,对于独特的表格,我也试过只重新上传带有唯一seq
索引字段的数据文件。这也花费了太多时间。
非常感谢,
PS,我有我的工作只有这个数据的24核服务器64GB。
不会启用键只需写一堆临时表,因为有唯一的键,你会有数据修改? – jwillis0720
根据我的回答,'DISABLE KEYS'只适用于*非*唯一索引。对于mysql来说,唯一索引必须或当然保持活动才能保持唯一性。这样做仍然会比没有更快。然而,无论如何,你看,它需要很多时间来做很多工作 – Bohemian
所以对于唯一的键,无论你是分组,上传,还是别的什么,它将花费大量的时间 – jwillis0720