Я использую сервер MySQL 5.0.67 в 32-разрядной Windows Vista с 3 ГБ ОЗУ ...
У меня 4,5 млн. Строк таблицы MyISAM (таблица A), и я создал программу на C # .NET, которая просматривает каждую из этих строк, извлекает определенную информацию и заполняет другую таблицу MyISAM (таблица B). Для каждой строки в таблице A я собираю около 80 строк для таблицы B. Структура таблицы B выглядит следующим образом: Field1 (целое число), Field2 (бит), Field3 (varchar (3)), Field4 (mediumint (8)), Field5 (mediumint (8)), Field6 (целое число), и существует уникальный ключ для комбинации Field1,2,3.
Я вставляю в Таблицу B с предложением IGNORE ON DUPLICATE KEY UPDATE ...
Когда я перебрал все строки из A, программа изначально запустилась нормально (около 50 строк в секунду), но после обработки около 120 000 строк она стала значительно медленнее. Поэтому я решил разделить вставку строк на 500 меньших таблиц (а не просто на таблицу B) с той же структурой, что и на таблицу B. Это завершилось примерно за 1 день.
Итак, я попытался объединить все 500 таблиц в таблицу B (которая до сих пор была пустой). Я создал скрипт, который запускал хранимую процедуру, выполняя INSERT INTO B SELECT * FROM (одну из этих 500 таблиц) sp с соответствующими таблицами, и пусть он работает в течение ночи. Проблема в том, что в определенный момент, после примерно 100 слияний, я получил сообщение об ошибке «Неверный файл ключа для таблицы B.MYI; попробуйте восстановить его».
Может ли это быть из-за того, что временный файл стал слишком большим? Или есть какая-то другая причина, по которой индекс поврежден? Может быть, потому что он имел дело с более чем 2 ГБ данных? Будет ли более разумным решение запустить партии из 5 слияний (а не 150)? Восстановление таблицы для меня не вариант, так как у меня нет возможности узнать, где в меньших таблицах он допустил ошибку, поэтому я должен начать заново и убедиться, что он работает. Сейчас я думаю об обновлении до MySQL 5.5.19 с помощью MSI-файла, но я не знаю, стоит ли это хлопот. Я просто хочу заполнить эту таблицу B, а затем сбросить ее и переместить в другое место. У меня все еще есть оригинальные 500 таблиц, так что если кто-то может указать мне правильное направление объединения их в 1, это было бы здорово!
Заранее спасибо,
Тим