0

私はおそらくこれを最も効率的な方法で行っていないことを知っています。XML 形式で保存されたデータがあり、XML データを個々の INSERT INTO .. VALUES (..) ステートメントに解析してから、これらのステートメントを実行しています。これらの何百万もの INSERT INTO ステートメントをバッチとして実行する良い方法はありますか?

これを AWS で実行しているため、通常の SQL サーバー ユーティリティ ツールを使用して XML データをインポートすることはできません。

どんな提案でも大歓迎です!

4

1 に答える 1

2

INSERT多くのセットを提供するマルチメソッドを使用することVALUESは、それらを個別に行うよりも常に優れています。設定と同じ大きさのステートメントを作成しmax_allowed_packet、理想的にはそれをできるだけ高く調整する必要があります。一般的に 2GB は可能な限り高く、最大速度を得るには、少なくとも 10 ~ 50MB のサイズのチャンクを入れる必要があります。

LOAD DATA INFILEもオプションですが、これは通常、マルチメソッドよりもせいぜい 10 ~ 15% 高速であり、INSERT開始するにはデータが特定の形式である必要があります。CSV またはタブ区切りが最も使いやすく、XML はオプションではありません。

最大限のパフォーマンスを得るには、大量のデータを挿入する前にインデックスを無効にします。これらのトリックのいくつかはmysqldump、空のデータベース スキーマのスナップショットでも見ることができます。

インデックス作成を無効にするには、インポートの前に次のステートメントを実行します。

 ALTER TABLE `table_name` DISABLE KEYS;

次に、インポート後、それらを再構築します。

 ALTER TABLE `table_name` ENABLE KEYS;
于 2012-11-06T20:02:12.130 に答える