Перенос таблицы с MS SQL Server на MySQL - PullRequest
1 голос
/ 23 октября 2008

Мне нужно перенести таблицу с MSSQL Server на MySql. Проблема в том, что таблица довольно большая (65 миллионов записей) и весь процесс занимает слишком много времени. У кого-нибудь есть идеи, как ускорить процесс? Любые полезные инструменты, которые могли бы улучшить это?

Ответы [ 7 ]

1 голос
/ 23 октября 2008

Нужно сделать это только один раз? Не тратьте слишком много времени на оптимизацию, подождите, пока он не закончится, и двигайтесь дальше.

Нужно делать это чаще? Затем было бы полезно выяснить, какие инструменты / методы вы используете в настоящее время.

1 голос
/ 01 августа 2009

Вот как я перенес таблицу записей 800K с MS Sql Server на MySQL.

Создание запроса для отображения данных в табличном формате :

SELECT [PostalCode] + ' ' +
  [StateCode] + '   ' +
  [Latitude] + '    ' +
  [Longitude] + '   ' +
  [CityName]  
FROM [dbo].[PostalCode]

Выполните запрос в SQL Server Management Studio и выберите для вывода результатов в файл (Меню: Запрос -> Результаты в -> Результаты в файл)

Имя файла должно быть именем таблицы в MySQL. Расширение файла не имеет значения.

Затем используйте mysqlimport.exe (в Windows) для импорта данных (таблица должна существовать в базе данных MySQL):

mysqlimport.exe --user=user_name
  --columns=postalcode,statecode,latitude,longitude,cityname 
  --ignore-lines=2 databaseName pathToFile

После импорта мне пришлось удалить последние 2 записи таблицы, потому что в конце файла содержался мусор: (затронуто 818193 строк)

Для 800K это довольно быстро: 10 секунд на экспорт, а затем 10 секунд на импорт.

Надеюсь, это поможет.

0 голосов
/ 23 октября 2008

Убедитесь, что ни у одного столбца нет индекса, и удалите все внешние ключи (если вы используете InnoDB для типа таблицы) для импорта.

0 голосов
/ 23 октября 2008

Попробуйте, если вы можете получить данные из mssql и в mysql с помощью пакетов SSIS / DTS, которые вы можете сгенерировать с помощью мастера импорта / экспорта SQL Server. (Подключитесь к MySQL с соответствующим поставщиком OLEDB / ADO.

Запустите его, когда вы отправитесь домой в пятницу, и зайдите после выходных;)

0 голосов
/ 23 октября 2008

Убедитесь, что файл хранилища таблиц MySQL достаточно большой, прежде чем начинать вставку, используя следующую инструкцию в файле my.ini:

innodb_data_file_path=ibdata1:1000M:autoextend
0 голосов
/ 23 октября 2008

Убедитесь, что у таблиц mysql изначально нет индексов; добавьте их по окончании загрузки.

0 голосов
/ 23 октября 2008

вы можете экспортировать данные в текст, а затем использовать оператор загрузки mysql:

загрузка данных локального файла '/somefolder/text_file_with_data.txt' в таблицу. Поля some_table, оканчивающиеся на '\t' строки, оканчивающиеся на '\n'

или если вы поместите файл данных на сервер MySQL, вы можете:

загрузка данных в файл '/somefolder_on_the_mysql_server/text_file_with_data.txt' в таблицу. Поля some_table, оканчивающиеся на '\t' строки, оканчивающиеся на '\n'

Я не уверен, каков синтаксис для экспорта mssql

Вы всегда можете экспортировать в наборах по 10 000 или 100 000.

...