MySQL INSERT INTO SELECT очень медленно - PullRequest
2 голосов
/ 20 февраля 2012

Я только что создал пустую таблицу document_test, которая является копией таблицы document. Затем я добавляю новый хост столбца в document_test и копирую все остальное из document. Заявление как:

INSERT INTO document_test (id,col1,col2,col3,col4) SELECT * from document;

Таблица document содержит около 5,5 миллионов строк, и я отключил ключи в document_test, установил foreign_key_checks в 0 и unique_checks в 0. Эти INSERT команды выполнялись в течение двух дней на Сервер Linux так и не был закончен. SHOW PROCESSLIST отображает состояние «Отправка данных». Команда SELECT count(*) FROM document_test; возвращает 0. Однако из команды SHOW TABLE STATUS я вижу, что число строк в document_test не равно нулю. Интересно, что, по-видимому, номер строки должен увеличиваться монотонно, но это НЕ. Результаты четырех последовательных запросов: 3299583, 3325775, 3299730 и 3341818!

Это то, что меня полностью смущает. Может ли кто-нибудь помочь мне в: (1) это вставка данных? (2) как закончить эту вставку своевременно? (2) есть ли способ проверить состояние этой команды INSERT INTO SELECT? (что дальше после «отправки данных»)

К сожалению, я не включил медленный журнал запросов и профилирование до запуска этой команды.

1 Ответ

2 голосов
/ 20 февраля 2012

Может быть, попытаться экспортировать данные, используя mysqldump, а затем ввести их через LOAD DATA?Это должно быть намного быстрее.

...