2013-01-23 1 views
0

나는 현재 MySQL은, LOAD 데이터 병행 LOCAL, 비활성화 및 활성화 키는

내가 (LOAD 데이터 완료 후 인덱스를 구축 사전에 키를 비활성화하고 활성화하여 LOAD DATA을 최적화하려면, 의 MyISAM 엔진 테이블에 데이터를 삽입 그것들이 끝난 후).

LOAD DATA CONCURRENT 설명서에서로드 데이터는 동일한 테이블에 대한 동시 읽기가 키를 계속 사용하는 것과 같은 시간에 테이블의 끝에 레코드를 추가해야합니다. 읽기 작업이 이 시작되기 전에 마지막으로 사용 가능한 색인 (자동 증가 된 ID)까지만 테이블에서 정보를 읽으려고합니다.

LOAD DATA CONCURRENT

인덱스 100,000부터 시작하여 데이터를 추가하고 자동 SELECT * FROM TableName WHERE id <=99999 AND ... 문이 발생할 수 있습니다 같은 시간에 200,000

까지 인덱스를 증가합니다.

LOAD DATA CONCURRENT 문에 대해서만 로컬로 키를 사용하지 않도록 설정하여 읽기 작업에서 정의 된 색인을 SELECT 문에서 계속 사용하도록 할 수 있습니까?

답변

1

나는 귀하의 id 열이 기본 키이고 그 값이 ALTER TABLE ... DISABLE KEYS이라고 가정합니다. the manual에 따르면

:

ALTER 표 ... 키를 비활성화 MySQL이 고유하지 않은 인덱스를 업데이트 중지 알려줍니다. (...) 고유하지 않은 색인은 사용 불가능하지만 SELECT 및 EXPLAIN과 같은 명령문에서는 무시됩니다. 그렇지 않으면 SELECT 및 EXPLAIN은 사용하지 않습니다.

따라서, 기본 키는 여전히하지만, 단지 테이블의 부분 집합에 키를 비활성화 할 수없는 형태로

SELECT * FROM TableName WHERE id <=99999 

의 질의에 사용됩니다.

+0

+1 내 모든 키는 단지 키이며 기본 키가 없습니다 (색인 만). 선택 항목으로도 사용됩니까? 이것을 확인하는 방법은 무엇입니까? – Michael

+0

@Michael Hum, 테이블에는 항상 기본 키가 있어야합니다. 인덱스가 고유하지 않은 경우 ('PRIMARY KEY'나 'UNIQUE'인덱스가 아닌 일반 INDEX가 아닌 경우), 해당 인덱스는 작동하지 않게됩니다. – RandomSeed

+0

좋아요, 다른 방법이 없다는 것을 알기보다 이것은 대답이기도합니다. BTW는 테이블이 항상 기본 키를 가져야한다고 말합니다. 범위 분할의 경우처럼 기본 키를 가지지 않는 이유가 있습니다. – Michael