我正在将大数据导入到MYSQL myisam表中。如果我使用ALTER TABLE来禁用/启用密钥或myisamchk工具会有什么区别吗?
ALTER TABLE DISABLE KEYS;
LOAD DATA INFILE 'file' INTO TABLE table;
ALTER TABLE ENABLE KEYS;
VS
myisamchk --keys-used=0 -rq path\templatelinks
LOAD DATA INFILE 'file' INTO TABLE table;
myisamchk -rq path\table
我检查了两者,发现ALTER TABLE的速度提高了约30%。还有其他差异,或者两者都做同样的事情吗?
答案 0 :(得分:2)
不,两者都没有做同样的功能。如果您希望更快地加载数据,则可以相应地禁用/启用密钥。我相信如果你使用--keys-used = 0,你将使用myisamchk实用程序获得更快的性能,如下所示:
myisamchk --keys-used=0 -rq path\table
答案 1 :(得分:0)
我试图从https://dumps.wikimedia.org/backup-index-bydb.html导入enwiki的page.sql.gz。它有35M记录,.gz大小约为1.2GB。
A)使用默认的" alter table page disable键"在sql脚本
这可能在开始时很快(1MB / s),然后越来越慢(30分钟后降至100KB / s),然后更糟。
pv enwiki-20150205-page.sql.gz | gzip -cd | sed 's/ENGINE=InnoDB/ENGINE=MyISAM/ | mysql enwiki
导入数据时,mysql将数据加载到page.MYD,并同时更新page.MYI。
B)使用myisamchk,大约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
导入数据时,mysql首先将数据加载到page.MYD中,之后,page.MYI单独更新。
C)我更喜欢myisamchk --keys-used=0 -rq /var/lib/mysql/enwiki/page
。效率更高。
根据mysql-refman-5.7-en.pdf
的第1425页:
使用ALTER TABLE ... DISABLE KEYS告诉MySQL停止更新非唯一索引
因此,如果有任何非唯一索引,请使用myisamchk禁用密钥。
另一方面,我比较myisamchk -rq /var/lib/mysql/enwiki/page
和alter table page disable keys
,它们似乎相当。