Optimisation de l'insertion de lignes de base de données MySQL pour des performances efficaces
Le défi consistant à insérer efficacement de grands volumes de lignes dans les bases de données MySQL est bien connu. Bien que l'extrait de code fourni utilisant des insertions individuelles puisse être familier, il présente des goulots d'étranglement en termes de performances. Cependant, il existe une approche alternative qui peut considérablement améliorer la vitesse d'insertion.
Insertion de plusieurs lignes
Au lieu d'effectuer une insertion distincte pour chaque ligne, il est plus efficace de regrouper plusieurs lignes en une seule instruction d'insertion. Cette technique est implémentée dans le code révisé suivant :
public static void BulkToMySQL() { string ConnectionString = "server=192.168.1xxx"; StringBuilder sCommand = new StringBuilder("INSERT INTO User (FirstName, LastName) VALUES "); using (MySqlConnection mConnection = new MySqlConnection(ConnectionString)) { List<string> Rows = new List<string>(); for (int i = 0; i < 100000; i++) { Rows.Add(string.Format("('{0}','{1}')", MySqlHelper.EscapeString("test"), MySqlHelper.EscapeString("test"))); } sCommand.Append(string.Join(",", Rows)); sCommand.Append(";"); mConnection.Open(); using (MySqlCommand myCmd = new MySqlCommand(sCommand.ToString(), mConnection)) { myCmd.CommandType = CommandType.Text; myCmd.ExecuteNonQuery(); } } }
Performances améliorées
Cette approche entraîne une réduction significative du temps d'insertion. Le code d'origine nécessitait 40 secondes pour insérer 100 000 lignes, tandis que le code révisé termine la tâche en seulement 3 secondes, soit une amélioration de plus de 90 % !
Explication
Le La clé de cette efficacité accrue réside dans la minimisation des allers-retours dans les bases de données. En regroupant plusieurs lignes en une seule instruction, nous réduisons la surcharge associée à l'établissement et à la fermeture de plusieurs connexions à la base de données. La base de données peut alors traiter l'ensemble du groupe d'insertions en une seule opération, éliminant ainsi le besoin d'une exécution séparée pour chaque ligne.
Considérations de sécurité
Il est important de toujours protéger contre l’injection de code lors de la création d’instructions SQL. L'utilisation de MySqlHelper.EscapeString dans le code fourni garantit que les entrées potentiellement malveillantes sont échappées en toute sécurité, empêchant ainsi les vulnérabilités d'injection SQL.
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!