복붙노트

[SQL] MySQL의 해제 및 키 사용

SQL

MySQL의 해제 및 키 사용

내 MySQL 데이터베이스에서 200 개 레코드가있는 테이블이 있습니다. 지금, 나는이 테이블에 다른 6,000,000 새로운 레코드를 삽입하고 싶습니다.

내가 사용하지 않도록 사용해야하지만 삽입 속도를 높이기 위해, 나는 / 다음과 같은 키를 사용 :

ALTER TABLE cars DISABLE KEYS;

INSERT INTO cars ...
...
...
INSERT INTO cars ...

ALTER TABLE search_all_values ENABLE KEYS;

OPTIMIZE TABLE cars;

그러나 나는 어떻게 든 빈 테이블 삽입에 사용하는 것이 더 나을 키를 활성화 / 비활성화, 그 느낌.

내 경우에는 동안, 나는 키를 사용하도록 설정하면, MySQL은 아마 전부 같은 효율적인 데이터 삽입을 생산하지 않습니다 (기존 레코드와 새로운 추가 기록을 포함) 모든 인덱스를 다시 만듭니다 테이블에 이미 200 만 개 기록을 가지고 내 경우. 모든 인덱스를 재 작성으로 시간이 오래 걸릴 아마도 그래서 OPTIMIZE 표를 수행합니다

나는 약 내가 맞다 어떻게 내가 내 경우에 efficent 데이터 삽입을 할 수 귀하의 의견을 묻고 싶다?

해결법

  1. ==============================

    1.당신은 확실히의 MyISAM 또는 InnoDB의 최적화 ... 엔진 유형에 따라 접근 방식을 선택해야합니다.

    당신은 확실히의 MyISAM 또는 InnoDB의 최적화 ... 엔진 유형에 따라 접근 방식을 선택해야합니다.

    우리는 최근에 데이터를 삽입하고 삽입하기 전에에서 모든 인덱스가 완전히 복원 될 때까지의 시간을 측정하는 다양한 방법을 비교하는 벤치 마크를 실행했습니다. 그것은 빈 테이블에 있었다, 그러나 우리는 1000 만 행까지 사용.

    LOAD DATA INFILE 및 ALTER TABLE과의 MyISAM은 ... ENABLE / DISABLE KEYS는 우리의 테스트에서 아래로 손을 수상 (윈도우 7 시스템에서의 MySQL 5.5.27 - 지금 우리는 리눅스 시스템에 그것을 시도하고).

    사용 및 사용 안 함 KEYS는 이노, 단지 그것의의 MyISAM 작동하지 않습니다. 이노 사용 SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS는 = 0; 데이터 중복을 포함하지 않는 당신이 확신하는 경우 (업로드가 완료되면 1로 설정하는 것을 잊지 마세요).

    MySQL의 행 삽입에 의해 정렬하고 인덱스 어쨌든 다시 빌드 - 난 당신이 대량 삽입 후 OPTIMIZE 표를 필요가 있다고 생각하지 않습니다. 대량 삽입을 수행하여 더 "여분의 분열"는 없습니다.

    나는 사실 오류를 만든 경우 의견을 주시기 바랍니다.

    UPDATE : 우리의 최근 완벽한 테스트 결과에 따르면, DISABLE에 대한 조언 / 키 사용 잘못된 것입니다.

    동료는 프로그램이 서로 다른 여러 테스트를 실행했다 - 이노 /의 MyISAM과 테이블이 채워져 및 비어, LOAD DATA LOCAL, INSERT INTO와 선택과 삽입 속도, 난 (테이블 "조각난" "밀도"와에 INTO 및 UPDATE를 교체 꽤 있는지 내가 어떻게 생각하는지, 그것은 여전히 ​​비교 그래서 고정 씨앗과 FROM ... ORDER BY RAND () LIMIT ... DELETE의 라인을 따라했다)와 활성화 diasabled 지수.

    우리는 많은 다른 MySQL의 버전을 테스트 (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) Windows 및 Linux (두 OS에서 동일하지 버전,하지만)에. 테이블이 비어있을 때의 MyISAM 만 원. 데이터가 이미 존재하고 일반적으로 더 나은 수행 할 때 InnoDB는 더 빨랐다 (하드 디스크 공간을 제외하고 -의 MyISAM 디스크에 작).

    그래도, 정말 혜택을, 당신은 스스로를 테스트해야 - 서로 다른 버전, 다른 구성 설정과 인내의 많은 - 특히 이상한 불일치 (5.0.97이 같은 설정과 5.5.27보다 훨씬 더 빨랐다에 대하여 - 우리는 '여전히) 원인을 찾고 다시. 우리가 발견 한 것은 그 DISABLE KEYS했다 당신이 빈 테이블로 시작하지 않는 경우 키 harmfull 다음 쓸모없는 및 때때로 수 있습니다.

  2. ==============================

    2.새로운 키를 인덱싱하는 것은 약간의 시간이 소요됩니다. 당신이 한 번에 (먼저 해제) 또는 한 번에 모든 일을해야 할 경우는 (있는 그대로를 유지하고 그것을 각 레코드가 추가되는으로 인덱스를 시켜서)를 결정하는 당신까지

    새로운 키를 인덱싱하는 것은 약간의 시간이 소요됩니다. 당신이 한 번에 (먼저 해제) 또는 한 번에 모든 일을해야 할 경우는 (있는 그대로를 유지하고 그것을 각 레코드가 추가되는으로 인덱스를 시켜서)를 결정하는 당신까지

    나는 당신의 키를 해제하지, 후자 가고 싶어. 당신이 훨씬에 서버를 강조 두려워하는 경우, 예를 들어, 일괄 삽입을 시도 할 수 분당 삽입의 일정 금액.

  3. from https://stackoverflow.com/questions/8210608/mysql-disable-enable-keys by cc-by-sa and MIT license