データベース/SQL パッケージを使用した Go でのバッチ SQL ステートメントの実行
複数の SQL ステートメントを一度に実行すると、パフォーマンスが大幅に向上し、ネットワーク待機時間が短縮されます。 Go では、database/sql パッケージは SQL ステートメントをバッチ処理するメカニズムを提供します。
SQL ステートメントのバッチ処理
database/sql パッケージを使用して Go で SQL ステートメントをバッチ処理するには、次のようにします。 1 つのアプローチは、db.Exec 関数の可変個数の性質を利用することです。事前に SQL ステートメントを構築し、引数を引数のスライスに展開することで、それらを db.Exec に渡すことができます。
コード例:
func BulkInsert(unsavedRows []*ExampleRowStruct) error { valueStrings := make([]string, 0, len(unsavedRows)) valueArgs := make([]interface{}, 0, len(unsavedRows) * 3) for _, row := range unsavedRows { valueStrings = append(valueStrings, "(?, ?, ?)") valueArgs = append(valueArgs, row.Column1) valueArgs = append(valueArgs, row.Column2) valueArgs = append(valueArgs, row.Column3) } stmt := fmt.Sprintf("INSERT INTO my_sample_table (column1, column2, column3) VALUES %s", strings.Join(valueStrings, ",")) _, err := db.Exec(stmt, valueArgs...) return err }
これこのアプローチには、単一のネットワーク ラウンドトリップでステートメントを実行できるという利点があり、その結果、パフォーマンスが向上します。
考慮事項:
SQL ステートメントのバッチ処理は有益ですが、バッチ処理アプローチを使用している場合でもデータベース ドライバーが複数のネットワーク操作を実行する可能性があることに注意することが重要です。 。データベース エンジンやドライバーの実装などの要因が動作に影響を与える可能性があります。
さらに、挿入される行数が多い場合は、バッチ SQL ステートメントを慎重に使用する必要があります。過剰なバッチ処理は、過剰なメモリを消費したり、タイムアウトにつながる可能性があります。
以上が`database/sql` パッケージを使用して Go でバッチ SQL ステートメントを効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。