テーブルを MSSQL Server から MySql に移行する必要があります。問題は、テーブルが非常に大きく (6,500 万レコード)、プロセス全体に時間がかかりすぎることです。物事をスピードアップする方法を知っている人はいますか? これを改善できる便利なツールはありますか?
7 に答える
これが、800KレコードテーブルをMSSqlServerから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秒です。
お役に立てれば。
一度だけ行う必要がありますか?最適化に時間をかけすぎないでください。完了するまで待ってから先に進んでください。
もっと頻繁に行う必要がありますか?次に、現在使用しているツール/テクニックを詳しく説明すると役立ちます。
SQL Server のインポート/エクスポート ウィザードで生成できる SSIS/DTS パッケージを使用して、mssql から mysql にデータを取得できるかどうか試してください。(適切な OLEDB/ADO プロバイダーを使用して MySQL に接続します。
金曜日に家に帰るときに開始し、週末の後にもう一度チェックしてください ;)
最初に mysql テーブルにインデックスがないことを確認してください。ロードが完了したら、それらを追加します。
my.ini ファイルで次のようなステートメントを使用して、挿入を開始する前に、MySQL テーブル ストレージ ファイルが十分な大きさであることを確認してください。
innodb_data_file_path=ibdata1:1000M:autoextend
列にインデックスが含まれていないことを確認し、インポート用の外部キー (テーブル タイプに InnoDB を使用している場合) を削除します。
データをテキストにエクスポートしてから、mysql load ステートメントを使用できます。
データローカル'/somefolder/text_file_with_data.txt'
ファイルをテーブル some_table にロードします フィールドは次の'\t'
行で終了します'\n'
または、データ ファイルを mysql サーバーに置くと、次のことができます。
データ infile'/somefolder_on_the_mysql_server/text_file_with_data.txt'
をテーブル some_table にロードします フィールドは次の'\t'
行で終了します'\n'
エクスポートする mssql の構文がわかりません
いつでも 10,000 または 100,000 のセットでエクスポートできます。