2012-04-19 20 views
34

私は約600,000の行を持つ2つのテーブルを含むSQLファイルを持っています。昨日、Fedora 16のMySQLデータベースにファイルをインポートしようとしましたが、ファイルのインポートに2時間以上かかりました。私のWindows PCでは7分かかりました。私のLinuxとWindowsのマシンはまったく同じハードウェアを持っています。私の友人のカップルもそれを試してみました、そして、彼らは同様の経験を持っていました。SQLのインポートが遅いのはなぜですか?

使用していたコマンドは、mysql -u root database_name < sql_file.sqlでした。

なぜこのような速度の違いがありますか?

+0

同じテーブルタイプ(INNODB/MYISAM/...)? –

+0

ええ、テーブルタイプは同じです:Innodb –

+0

mysqlimportをチェックアウトしましたか? http://stackoverflow.com/questions/2956407/mysql-console-slow-on-import-of-huge-sql-filesを参照してください。 – rorycl

答えて

65

私の考えは、Fedora 16はトランザクション/同期のセマンティクスを尊重しており、Windowsはそうではないということです。数学を行うと、2時間で60万回の更新が1分あたり5,000回になります。これはディスクの回転速度と同じオーダーです。

インポートファイルの先頭にSET autocommit=0;を追加し、末尾にCOMMIT;を追加できます。詳細については、this pageを参照してください。

+2

それは大きな違いを作った!もう一度試してみましたが、インポートの合計時間は3分未満でした。タンクはたくさんあります:) –

+0

違いは天文学です。私は27MBのダンプファイルで20分お待ちしてから、あなたの提案から始めてください。その後1分もかかりませんでした。素晴らしい答え! –

+0

これはうまくいきました。それ以外の場合は、一括挿入を使用して入力ファイルを再形成することもできます。ありがとう。 –

3

なぜあなたはmysqldumpを

--extended-insertを使用してバックアップを取っている間、これらのオプションを試してみてください、BULK INSERTオプションとして.sqlファイルをエクスポートし、それをインポートしない:

--quick複数行の挿入ステートメントを使用します。実行しませんあなたが.sqlファイルを生成する前のmy.cnfファイルでmax_allowed_packet = 32M以上の値を大きくする必要があり確認してください:行データ、良いテーブルが大きい場合は

ノートのバッファリング。

+0

あなたの答えをありがとう、私はそれをチェックアウトします。 –

+1

@ LarsSteen Mahesh Patilのヒントは何か変わったのですか? – Alex

+0

いいえ、それほど大きな違いはありませんでした。 –

関連する問題