9.6 大量のデータをバッチインサート

複数の大量データをインサートするときにデータを1行1行逐次ループでインサートしてパフォーマンスがでない、といった経験がある方は多くいるのではないでしょうか。大量のデータを効率的にインサートする方法が大きく3つあります。1つはプリペアードステートメントを使う方法、もう1つがバッチインサートあるいはバルクインサートを使う方法、残り1つがデータベース組み込みのコマンドを使う方法です。

9.6.1 プリペアードステートメントを使う

プリペアードステートメントを用いると効率的にクエリーを発行できます。複数のデータをインサートするときには複数回の INSERT 文を発行しますが、 ExecContext() ではプリペアードステートメントでSQLをパースしたキャッシュを使用します。そのため、各ループではパラメーター(とキャッシュされたプリペアードステートメントにひも付く番号)だけをデータベースに送信して、プリペアードステートメントを実行します。プリペアードステートメントのパラメーターは ExecContext() の引数として渡します。Javaではプリペアードステートメントにパラメーターのセットを追加する addBatch() のようなメソッドがありますが、Goにこのようなメソッドはありません。プリペアードステートメントを使用したときのコネクションは stmt が管理し、コネクションが使用できない場合はコネクションプールから別のコネクションを用いてステートメントを作成します。

次のコードは、プリペアードステートメントを使って複数のデータを挿入する実装の例です。

	users := []User{
		{"0001", "Gopher"},
		{