ほとんどのフィールドが長い文字列 (DNA シーケンス) である巨大なデータベースがあります。現在、約 5 億行です。私の最初のテーブルでは、このデータ構造に実装される 5 億行すべてが必要です。
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 プライマリ ID (prim_id) のみを使用して、このテーブルを簡単にアップロードできます。しかし、インデックスを追加すると、巨大な一時テーブルを書き出すのに永遠に時間がかかります。一方、最初にテーブルを設計すると、アップロードに永遠に時間がかかります。欠落しているSQLサーバーオプションはありますか? 現在、Innodb エンジンを実行しています。避けられないインデックス作成を待っていますか? これを行う必要があるのは、これらの列のすべてが最終的にある時点でグループ化されるためです。たとえば、このテーブルから一意の別のテーブルを作成したいのですがseq
、最初にこのテーブルにインデックスを付けないと作成できません。私はこれを正しい方法で行っていますか?
さらに、一意のテーブルについては、一意のseq
インデックス フィールドを使用してデータ ファイルを再アップロードしようとしました。これも時間かかりすぎ。
本当にありがとう、
PS、私はこのデータのみを扱う 24 コア 64 GB サーバーを使用しています。