巨大なインデックス付き MySQL テーブル (~300-400 GB) があり、時々新しいエントリを追加する必要があります (新しいデータには ~10-20 GB かかります)。新しいデータを含む未加工ファイルには間違いが含まれている可能性があり、手動でのみ修正でき、処理スクリプトがそれらに到達した場合にのみ表示されます。また、新しいデータは、生データの完全な処理が終了した後にのみ、メイン データベースで使用できるようにする必要があります。したがって、メイン テーブルを台無しにしないために、次のワークフローを使用することにしました。
スクリプトは、メイン テーブルと同じ構造を持つ一時テーブルを作成し、それを埋めます。
完了して検証されると、一時テーブルがメイン テーブルに挿入されます。
INSERT INTO main_table (all_fields_except_primary_key) SELECT all_fields_except_primary_key FROM new_table;
そして、新しい結果にインデックスを付けるために理解しているように、この手順は非常に遅いです。
インデックス付きテーブルへの挿入は一般的に非常に遅く、大量のデータを挿入する前にインデックスを削除してから再度インデックスを作成することを提案する専門家もいます。しかし、テーブル全体のこのような巨大なデータのインデックス作成は非常に長く (私の単純な INSERT INTO .. SELECT .. よりもはるかに長く)、さらに重要なことは、メインテーブルはその間ほとんど使用できませんでした (インデックスなしで SELECTS には時間がかかります) .
したがって、挿入する前に一時テーブルにインデックスを付けて(非常に高速であるため)、両方のインデックスを組み合わせてマージするという考えがありました。
MySQLで何とか可能ですか?
そして別の質問: おそらく私の仕事には別の回避策がありますか?