約600,000行の合計2つのテーブルを含むSQLファイルがあります。昨日、Fedora 16上のMySQLデータベースにファイルをインポートしようとしましたが、ファイルのインポートに2時間以上かかりました。私のWindows PCでは、7分かかりました。私のLinuxマシンとWindowsマシンのハードウェアはまったく同じです。数人の友人も試してみましたが、同じような経験をしました。
使用していたコマンドは:mysql -u root database_name < sql_file.sql
。
なぜ速度にそのような違いがあるのですか?
私の賭けは、Fedora 16はトランザクション/同期のセマンティクスを尊重し、Windowsはそうではないということです。計算すると、2時間で60万件の更新が1分あたり5,000件になります。これは、ディスクの回転速度と同じ桁です。
SET autocommit=0;
をインポートファイルの先頭に、COMMIT;
を末尾に追加してみてください。詳細については、 このページ を参照してください。
.sqlファイルをBULK INSERT
オプションとしてエクスポートしてインポートしないのはなぜですか。mysqldumpを使用してバックアップを取りながらこれらのオプションを試してください。
--extended-insert
:複数行の挿入ステートメントを使用する
--quick
:行データのバッファリングを行いません。テーブルが大きい場合に適しています
注: .sqlファイルを生成する前に、my.cnfファイルでmax_allowed_packet
= 32M以上の値を増やす必要があります。