Load Data Infile を使用した MySQL データ インポートの最適化
大きなデータセットを MySQL テーブルにインポートするのは、時間のかかる作業になる可能性があります。 「Load data infile...」コマンドを使用する場合、速度とデータの整合性のバランスを取るのが難しい場合があります。この質問では、そのようなインポート、特にキーを持つテーブルのパフォーマンスを向上させる方法を検討します。
インポート速度の向上
質問で言及されている主な懸念事項は、キーが遅いことです。キーなしでデータをインポートした後の作成。これに対処するには:
-
CSV ファイルを並べ替えます: CSV ファイル内のデータをテーブルの主キーの順序で並べ替えます。これにより、Innodb はクラスタ化された主キー構造を利用して読み込みを高速化できます。
-
制約を無効にする: 一意キーと外部キーのチェックを一時的に無効にして、読み込み中のオーバーヘッドを削減します。コマンド set unique_checks = 0; を使用します。
-
バイナリ ログを無効にする: バイナリ ログをオフにして (sql_log_bin=0; に設定)、パフォーマンスを向上させるためにログをバイパスします。
-
分割大きなファイル: 大きな CSV ファイルを小さなチャンクに分割し、個別にロードします。これにより、メモリ消費量が削減され、プロセスが高速化されます。
キー作成の高速化
データをロードした後のキーの再構築は、長時間の操作になる可能性があります。以下にいくつかの提案を示します:
-
一括挿入: LOAD DATA INFILE ステートメント内で BULK INSERT 句を使用して、キーを含むデータを一度にインポートします。
-
適応ハッシュ インデックス: 適応ハッシュ インデックス (innodb_adaptive_hash_index=ON) を有効にして、頻繁に使用されるクエリのインデックス作成を高速化します。
-
並列インデックス作成: 可能であれば、並列インデックス作成を使用します。 (innodb_Parallel_alter=ON) により、インデックス作成に複数のスレッドが作成され、所要時間が短縮される可能性があります。
低速クエリの終了
実行を続ける低速クエリを終了するには終了後は、次の点を考慮してください:
-
接続を再試行: MySQL サーバーを切断して再接続し、クエリを正常に終了します。
-
クエリ ID を使用: SHOW PROCESSLIST を使用してクエリの ID を特定し、KILL [QUERY_ID] を使用して強制終了します。
-
MySQL を再起動します: 最後の手段として、MySQL を再起動すると、実行中のクエリがすべて終了します。ただし、サービスの中断を引き起こす可能性があります。
以上がキーを持つテーブルのデータ インファイルのロードを使用して MySQL データ インポートを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。