Exécuter des instructions SQL par lots dans Go avec une base de données/un package SQL
L'exécution de plusieurs instructions SQL à la fois peut améliorer considérablement les performances et réduire la latence du réseau. Dans Go, le package base de données/sql fournit un mécanisme pour regrouper les instructions SQL.
Regroupement des instructions SQL
Pour regrouper les instructions SQL dans Go à l'aide du package base de données/sql, une approche consiste à utiliser la nature variadique de la fonction db.Exec. En construisant l'instruction SQL au préalable et en éclatant les arguments en une tranche d'arguments, vous pouvez les transmettre à db.Exec.
Exemple de code :
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 }
Ceci Cette approche présente l'avantage d'exécuter l'instruction en un seul aller-retour sur le réseau, ce qui permet d'améliorer performances.
Considérations :
Bien que le traitement par lots d'instructions SQL puisse être bénéfique, il est important de noter que le pilote de base de données peut toujours effectuer plusieurs opérations réseau même en utilisant l'approche par lots . Des facteurs tels que le moteur de base de données et l'implémentation du pilote peuvent affecter le comportement.
De plus, le traitement par lots des instructions SQL doit être utilisé judicieusement lorsque le nombre de lignes insérées est important. Un traitement par lots excessif peut consommer une mémoire excessive ou entraîner des délais d'attente.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!