2012-01-28 2 views
0

큰 데이터를 MYSQL myisam 테이블로 가져오고 있습니다. 비활성화 또는 활성화 키 또는 myisamchk 도구에 대해 ALTER TABLE을 사용하면 어떤 차이가 있습니까?테이블 활성화 키와 myisamchk 변경

ALTER TABLE DISABLE KEYS; 
LOAD DATA INFILE 'file' INTO TABLE table; 
ALTER TABLE ENABLE KEYS; 

내가 모두를 확인하고 ALTER 테이블이 약 30 % 빠른 것으로 나타났습니다

myisamchk --keys-used=0 -rq path\templatelinks 
LOAD DATA INFILE 'file' INTO TABLE table; 
myisamchk -rq path\table 

VS. 다른 점이 있습니까? 아니면 둘 다 똑같은 것을합니까?

답변

2

아니요, 둘 모두 동일한 기능을 수행하지 않습니다. 데이터를 더 빠르게로드하려면 이미 수행 한 작업에 따라 키를 비활성화/활성화 할 수 있습니다. 난 당신이 --keys 사용되는 0 =을 사용하는 경우 다음과 같이 myisamchk를 유틸리티를 사용하여 빠른 성능을 얻을 것이다 생각 : 나는 https://dumps.wikimedia.org/backup-index-bydb.html에서 enwiki의 page.sql.gz를 가져 오기 위해 노력하고있어

myisamchk --keys-used=0 -rq path\table 
0

. 그것은 35M 레코드를 가지고 있으며 .gz 크기는 약 1.2GB입니다.

A)는)

이 시작 부분 (1메가바이트/S)에 빠른 수, 다음 느린 속도가 느린 (삼십분 후에 1백킬로바이트/S까지 SQL 스크립트에서 "테이블 페이지 해제 키를 변경"기본값을 사용 , 그럼 더 나빠질거야.

데이터를 가져올 때 mysql이 page.MYD에 데이터를로드하고 동시에 page.MYI를 업데이트했습니다.

B)는 그 후, page.MYI 별도로 갱신하고, 제 page.MYD에 데이터, MySQL은로드 된 데이터를 가져올 때 20 분 정도

# create empty table 
zcat enwiki-20150205-page.sql.gz | sed '/^)/q' | sed 's/ENGINE=InnoDB/ENGINE=MyISAM/' | mysql enwiki 
# use myisamchk 
myisamchk --keys-used=0 -rq /var/lib/mysql/enwiki/page 
# 9min to load data, 12min to re-index (triggered by "enable keys" in script) 
pv enwiki-20150205-page.sql.gz | gzip -cd | sed '/^DROP TABLE.*;$/d' | sed '/^CREATE TABLE/,/^).*;$/d' | mysql enwiki 

이루어는 myisamchk를 사용한다.

c) 나는 myisamchk --keys-used=0 -rq /var/lib/mysql/enwiki/page이다. 훨씬 더 효율적입니다.

mysql-refman-5.7-en.pdf에 p.1425에 따르면 사용 ALTER TABLE ... DISABLE KEYS 고유하지 않은 인덱스

어떤 고유하지 않은 인덱스가 그래서 경우, 사용 myisamchk를 해제하는 키를 업데이트 중지 MySQL의에게 .

반면에 나는 myisamchk -rq /var/lib/mysql/enwiki/pagealter table page disable keys을 비교했는데, 그것들은 같습니다.