バッチサイズ100のBulk INSERT

1バッチあたり100行のBulk INSERT文を生成します。100が一般的なデフォルトバッチサイズである理由と、パフォーマンスバランスのための使い方を学びます。

Batch Sizes

詳細な説明

バッチサイズ100:安全なデフォルト

INSERT文1つあたり100行のバッチサイズは、すべての主要データベースでパフォーマンスと互換性のバランスが取れた、広く推奨されるデフォルトです。

なぜ100行なのか?

100という数値は実用的なスイートスポットです:

  1. 制限内に十分収まる: SQLiteのデフォルト999変数制限でも、カラム数9以下なら100行を収容可能
  2. 良好なパフォーマンス: 個別INSERTと比較してラウンドトリップを100倍削減
  3. エラー管理が容易: バッチが失敗しても、数千行ではなく100行だけリトライすればよい
  4. メモリに優しい: ほとんどのデータセットで生成されるSQLが1MB以内

出力例

350行のデータセットの場合:

-- バッチ 1(行 1-100)
INSERT INTO orders ("id", "customer", "total", "status")
VALUES
  (1, 'Alice', 150.00, 'shipped'),
  (2, 'Bob', 89.50, 'pending'),
  -- ... 行 3-99 ...
  (100, 'Zara', 210.00, 'delivered');

-- バッチ 2(行 101-200)
INSERT INTO orders ("id", "customer", "total", "status")
VALUES
  (101, 'Alex', 45.00, 'shipped'),
  -- ... 行 102-200 ...

-- バッチ 3(行 201-300)
-- ...

-- バッチ 4(行 301-350)
INSERT INTO orders ("id", "customer", "total", "status")
VALUES
  (301, 'Mike', 99.00, 'pending'),
  -- ... 残り49行 ...
  (350, 'Nina', 175.00, 'shipped');

100を選ぶべきとき

以下の場合にバッチサイズ100を使用してください:

  • データベースの制限が不明な場合
  • 行のカラム数が多い場合(10以上)
  • エラーの分離が必要な場合(バッチ単位のデバッグが容易)
  • 複数のデータベースエンジンを対象とする場合

ユースケース

開発環境(SQLite)、ステージング(PostgreSQL)、本番(MySQL)で動作する必要があるデータ移行スクリプトを構築する場合。バッチサイズ100は3つすべてのデータベースで安全です。

試してみる — JSON to Bulk INSERT

フルツールを開く