April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
複数の大量データをインサートするときにデータを1行1行逐次ループでインサートしてパフォーマンスがでない、といった経験がある方は多くいるのではないでしょうか。大量のデータを効率的にインサートする方法が大きく3つあります。1つはプリペアードステートメントを使う方法、もう1つがバッチインサートあるいはバルクインサートを使う方法、残り1つがデータベース組み込みのコマンドを使う方法です。
プリペアードステートメントを用いると効率的にクエリーを発行できます。複数のデータをインサートするときには複数回の INSERT 文を発行しますが、 ExecContext() ではプリペアードステートメントでSQLをパースしたキャッシュを使用します。そのため、各ループではパラメーター(とキャッシュされたプリペアードステートメントにひも付く番号)だけをデータベースに送信して、プリペアードステートメントを実行します。プリペアードステートメントのパラメーターは ExecContext() の引数として渡します。Javaではプリペアードステートメントにパラメーターのセットを追加する addBatch() のようなメソッドがありますが、Goにこのようなメソッドはありません。プリペアードステートメントを使用したときのコネクションは stmt が管理し、コネクションが使用できない場合はコネクションプールから別のコネクションを用いてステートメントを作成します。
次のコードは、プリペアードステートメントを使って複数のデータを挿入する実装の例です。
users := []User{
{"0001", "Gopher"},
{Read now
Unlock full access