иногда, я должен повторно импортировать данные для проекта, таким образом читая приблизительно 3,6 миллиона строк в таблицу MySQL (в настоящее время InnoDB, но я на самом деле действительно не ограничен этим механизмом). "Данные загрузки infile..." оказались быстрым решением, однако это имеет компромисс: - при импорте без ключей сам импорт занимает приблизительно 45 секунд, но ключевое создание берет возрасты (уже работающий в течение 20 минут...). - выполнение импорта с включает таблицу, делает импорт намного медленнее
Существуют ключи более чем 3 поля таблицы, ссылаясь на числовые поля. Там какой-либо путь состоит в том, чтобы ускорить это?
Другая проблема: когда я завершаю процесс, который запустил медленный запрос, он продолжает работать на базе данных. Там какой-либо путь состоит в том, чтобы завершить запрос, не перезапуская mysqld?
Большое спасибо DBA
, если вы используете innodb и массовую загрузку, вот несколько советов:
отсортируйте ваш CSV-файл в порядке первичных ключей целевой таблицы: помните, что innodb использует кластеризованные первичные ключи, чтобы он загружался быстрее, если его отсортировать!
типичный файл данных загрузки, который я использую:
truncate <table>;
set autocommit = 0;
load data infile <path> into table <table>...
commit;
другие оптимизации, которые можно использовать для увеличения времени загрузки:
set unique_checks = 0;
set foreign_key_checks = 0;
set sql_log_bin=0;
разделить файл CSV на более мелкие части
типичная статистика импорта, которую я наблюдал во время массовой загрузки:
3.5 - 6.5 million rows imported per min
210 - 400 million rows per hour
Этому сообщению в блоге почти 3 года, но он все еще актуален и содержит несколько хороших предложений по оптимизации производительности "ЗАГРУЗИТЬ ИНФАЙЛ ДАННЫХ":
http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/