Heim >Backend-Entwicklung >Golang >Wie kann ich SQL-Anweisungen mithilfe des Datenbank-/SQL-Pakets von Go effizient stapeln?

Wie kann ich SQL-Anweisungen mithilfe des Datenbank-/SQL-Pakets von Go effizient stapeln?

DDD
DDDOriginal
2024-12-26 13:31:10939Durchsuche

How to Batch SQL Statements Efficiently Using Go's database/sql Package?

Batchverarbeitung von SQL-Anweisungen mit dem Go-Datenbank-/SQL-Paket

In Java kann die Ausführung mehrerer SQL-Anweisungen in einem Batch über die Methoden PreparedStatement undexecuteBatch() erreicht werden. Aber wie können wir dasselbe mit dem Datenbank-/SQL-Paket von Go erreichen?

Das Datenbank-/SQL-Paket stellt eine Exec-Funktion bereit, die SQL-Anweisungen ausführen kann. Es wird jedoch nur ein einziger Satz von Argumenten benötigt. Um mehrere Anweisungen zu stapeln, können wir eine Variadic-Funktion verwenden und eine einzelne SQL-Anweisung erstellen, die alle einzelnen auszuführenden Anweisungen enthält.

Hier ist ein Beispiel:

func bulkInsert(unsavedRows []*ExampleRowStruct) error {
    var (
        valueStrings []string
        valueArgs    []interface{}
    )

    for _, post := range unsavedRows {
        valueStrings = append(valueStrings, "(?, ?, ?)")
        valueArgs = append(valueArgs, post.Column1)
        valueArgs = append(valueArgs, post.Column2)
        valueArgs = append(valueArgs, post.Column3)
    }

    stmt := fmt.Sprintf(
        "INSERT INTO my_sample_table (column1, column2, column3) VALUES %s",
        strings.Join(valueStrings, ","),
    )

    _, err := db.Exec(stmt, valueArgs...)
    return err
}

Dieser Code erstellt eine einzelne SQL-Anweisung, die alle Zeilen in die Datenbank einfügt. Indem wir die einzelnen Anweisungsargumente (Werte) als variable Parameter übergeben, können wir mehrere Anweisungen in einem einzigen Netzwerk-Roundtrip ausführen. Tests haben gezeigt, dass dieser Ansatz deutlich schneller sein kann als die Verwendung der Begin-, Prepare- und Commit-Methoden zum Stapeln von SQL-Anweisungen.

Das obige ist der detaillierte Inhalt vonWie kann ich SQL-Anweisungen mithilfe des Datenbank-/SQL-Pakets von Go effizient stapeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn