Изменить таблицу включения ключей и myisamchk - PullRequest
0 голосов
/ 28 января 2012

Я делаю импорт больших данных в таблицу myysam MYSQL. Есть ли какая-либо разница, если я использую 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% быстрее. Есть ли какие-то другие различия, или оба делают одно и то же?

Ответы [ 2 ]

2 голосов
/ 28 января 2012

Нет, оба не выполняют одинаковую функциональность. Если вы хотите быстрее загружать данные, вы можете отключить / включить ключи в соответствии с тем, что вы уже сделали. Я полагаю, что вы получите более высокую производительность, используя утилиту myisamchk, если вы используете --keys-used = 0 следующим образом:

myisamchk --keys-used=0 -rq path\table
0 голосов
/ 14 февраля 2015

Я пытаюсь импортировать страницу enwiki page.sql.gz из https://dumps.wikimedia.org/backup-index-bydb.html. Он имеет 35M записей, размер .gz составляет около 1,2 ГБ.

A) использовать таблицу изменений по умолчаниюключи отключения страницы "в скрипте sql

Это может быть быстрым в начале (1 МБ / с), а затем медленнее и медленнее (до 100 КБ / с через 30 минут), а затем еще хуже.

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

При импортеdata, mysql загружал данные в page.MYD сначала, после этого page.MYI обновлялся отдельно.

C) Я предпочитаю myisamchk --keys-used=0 -rq /var/lib/mysql/enwiki/page.Гораздо эффективнее.

В соответствии с п.1425 для mysql-refman-5.7-en.pdf: используйте ALTER TABLE ... DISABLE KEYS, чтобы MySQL прекратил обновление неуникальные индексы

Так что еслиСуществуют неуникальные индексы, используйте myisamchk для отключения ключей.

С другой стороны, я сравнил myisamchk -rq /var/lib/mysql/enwiki/page и alter table page disable keys, они кажутся эквивалентными.

...