テーブルをMyISAMからInnoDBに変更すると、システムが遅くなります
質問
こんにちは、Mysql 5.0.xを使用しています
多くのテーブルをMyISAMからInnoDBに変更しました
MyISAMテーブルでは、データベースをインストールするのに約 1分かかりました InnoDBでは、同じデータベースをインストールするのに 15分かかります
InnoDBにそれほど時間がかかるのはなぜですか?
速度を上げるにはどうすればよいですか
データベースのインストールは次の手順を実行します
1)スキーマを削除します
2)スキーマを作成します
3)テーブルの作成
4)ストアドプロシージャの作成
5)デフォルトデータの挿入
6)ストアドプロシージャ経由でデータを挿入します
編集:
デフォルトのデータの挿入には、ほとんどの時間がかかります
解決
Insert Dataステップを変更して、開始時にトランザクションを開始し、終了時にトランザクションをコミットします。あなたは改善されるでしょう、私はそれを保証します。 (大量のデータがある場合は、トランザクションをテーブルごとに分割することをお勧めします。)
アプリケーションがトランザクションをまったく使用しない場合は、パラメータinnodb_flush_log_at_trx_commit
を2に設定する必要があります。これにより、auto_commitがほぼ確実に有効になり、より多くのトランザクションが生成されるため、多くのパフォーマンスが戻ります。 InnoDBのデフォルトパラメータは設定されています。この設定により、コミットごとにディスクバッファが不必要にフラッシュされるのを停止します。
他のヒント
15分は私にとって過度に思えません。結局のところ、1回限りの費用です。
確かではありませんが、説明の一部は参照整合性が無料ではないことだと思います。 InnoDBはそれを保証するためにより多くの作業を行う必要があるため、もちろんより多くの時間がかかります。
テーブルの作成後に制約を追加するには、スクリプトを変更する必要があるかもしれません。
duffymoが言ったように、データを挿入する前に制約(インデックスとフォア/主キー)を無効にします。
多くの select ステートメントを使用している場合、ストアドプロシージャを介してデータを挿入する前にインデックスを復元する必要があるかもしれません