2012-12-17 3 views
0

대부분의 필드가 긴 문자열 (DNA 시퀀스) 인 거대한 데이터베이스가 있습니다. 현재 약 5 억 개의 행이 있습니다. 초기 테이블의 경우이 데이터 구조에 구현되는 5 억 개의 행을 모두 원할뿐입니다.5 억 행 데이터베이스 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 primary id (prim_id) 만 사용하여이 테이블을 쉽게 업로드 할 수 있습니다. 그러나 인덱스를 추가 할 때 거대한 임시 테이블을 영구히 작성해야합니다. 반면에 테이블을 먼저 디자인하면 업로드하는 데 오래 걸립니다. 내가 누락 된 일부 SQL Server 옵션이 있습니까? 나는 현재 Innodb 엔진을 운영하고있다. 피할 수없는 것을 색인 생성하기를 기다리고 있습니까? 이 작업을 수행해야하는 이유는 모든 열이 결국 어느 시점까지 그룹화되기 때문입니다. 예를 들어, 유일 테이블 seq이라는 고유 한 테이블을 만들고 싶지만이 테이블을 먼저 인덱싱하지 않으면이 테이블을 만들 수 없습니다. 내가 올바른 방향으로가는거야?

고유 테이블의 경우 고유 한 seq 색인 필드가있는 데이터 파일을 다시 업로드하려고 시도했습니다. 이것은 또한 너무 많은 시간이 걸립니다.

덕분에 너무 많은,

PS, 나는 I는이 데이터를 함께 일하고 있어요 24 코어 64 기가 바이트 서버가 있습니다. MySQL과

답변

0

, 일시적으로 고유하지 않도록 설정할 수 있습니다 색인 :

ALTER TABLE tbl_name DISABLE KEYS; 

-- Do lots of inserts without updating the index every row 

ALTER TABLE tbl_name ENABLE KEYS; -- Indexes are refreshed once here 

추가, 삽입 속도를 모든 삽입에 대한 거래에 삽입 포장보다는 커밋하려면

ALTER TABLE tbl_name DISABLE KEYS; 

START TRANSACTION; 
-- Do lots of inserts without updating the index or committing every row 
COMMIT; -- Inserts are committed in one operation here 

ALTER TABLE tbl_name ENABLE KEYS; -- Indexes are refreshed once here 

도 각각을로드하지 않도록주의하십시오. 그렇지 않으면 로그의 최고 수위를 초과하고 예외가 발생하며 모든 것이 롤백됩니다 (시행 착오지만 한 번에 10000 번 시도).

+0

고유 키가 있으므로 데이터 수정이 가능하므로 사용 가능 키가 여러 임시 테이블을 작성해야하지 않을까요? – jwillis0720

+0

제 답변대로, 'DISABLE KEYS'는 * non * unique 인덱스에서만 작동합니다. 유일 인덱스는 mysql이 유일성을 유지할 수 있도록 활성화되어 있어야한다. 이 작업을 수행하는 것보다 빠를 것입니다. 그러나 어쨌든 당신이 그것을 보니 많은 시간을 할애하여 – Bohemian

+0

을 고유 키로 그룹화하든, 업로드하든간에, 시간이 많이 걸릴 것입니다. – jwillis0720