2017-09-22 5 views
0

나는 구성된 기본 키 과 함께 200,000,000 행 MYISAM에 대한 큰 테이블을 가지고 있지만 색인이 없습니다.Mysql 큰 테이블에서 테이블에서 다른 데이터로 이동하는 방법

와 나는 인덱스를 생성하고자하지만 probleme 내가 추가 인덱스 요청을 실행할 때 테이블 서버가 고장이다 :

ALTER TABLE `db`.`table` 
ADD INDEX `index_0001` (`col1` ASC); 

그래서 내가 새 테이블을 생성하고 필요한 색인 및 이동을 구성 할 것 데이터를 새 테이블에 추가하고 이름을 바꿉니다.

내가이 manip 시도 :

INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 0 ; 
INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 100000 ; 
INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 200000 ; 
.......... etc 

을하지만 상쇄 될 더 후 100,000,000 쿼리 라인 응답이 더 느려질 때.

다른 해결책이 있습니까?

tahnks

답변

1

사용 limit 100000 offset 100000 ;이 MySQL을가 100000 개 기록을 검색하고 100,001에서 레코드를 가져 의미;

검색 100000 레코드가 테이블 전체 스캔이므로 검색 속도가 매우 느립니다.

사용 Primary key 검색 할 이 Primary key이 번호로 구분 할 수없는 경우, Join

select field1,field2... from tbname tb1,(select pk from tbname limit 100000 offset 100000)tb2 where tb1.pk = tb2.pk를 사용 ... where pk >=100000 and pk <= 199999

처럼, 더 좋은 방법입니다

사용 Primary key 레코드가 TABLE FULL SCAN보다 더 나은 검색;

+0

감사합니다. 하지만 3 개의 필드에서 복합 기본 키가 있습니다 – ALWAN

+0

@ALWAN이 샘플은 샘플이며 근본 원인은 전체 테이블 스캔입니다. 기본 키 또는 다른 unque 키를 사용하는 것이 더 좋습니다 : P –