Maison >base de données >tutoriel mysql >Comment puis-je réaliser une insertion groupée ultra-rapide de lignes dans MySQL ?

Comment puis-je réaliser une insertion groupée ultra-rapide de lignes dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-24 20:19:14720parcourir

How Can I Achieve Ultra-Fast Bulk Insertion of Rows into MySQL?

Optimiser l'insertion de lignes MySQL : réaliser une insertion en masse ultra-rapide

Dans cet article, nous abordons le besoin d'insertion de lignes efficace dans un MySQL base de données. Nous présentons une solution optimisée qui réduit considérablement le temps d'insertion, améliorant ainsi les performances globales de la base de données.

Contexte

De nombreux développeurs rencontrent des goulots d'étranglement en termes de performances lors de l'insertion de gros volumes de données dans MySQL. Bien que les approches basées sur des boucles utilisant des instructions SQL individuelles soient fonctionnelles, elles peuvent être inefficaces et lentes.

Énoncé du problème

Dans l'exemple fourni, le code basé sur les boucles prend 40 secondes pour insérer 100 000 lignes dans une base de données MySQL, soulignant la nécessité d'une solution plus efficace

Solution

Nous remplaçons l'approche basée sur les boucles par une technique d'insertion en masse utilisant un StringBuilder pour construire une seule instruction SQL contenant plusieurs lignes à insérer en même temps . En utilisant cette approche, nous obtenons des améliorations significatives des performances.

Exemple de code

Le code optimisé est fourni ci-dessous :

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();
        }
    }
}

Résultats

En utilisant l'approche d'insertion groupée, le temps d'insertion pour 100 000 les lignes passent de 40 secondes à seulement 3 secondes, démontrant une amélioration remarquable des performances de 93 %.

Considérations supplémentaires

  1. Sécurité : Nous avons ajouté MySqlHelper.EscapeString pour empêcher le code injection.
  2. Réglage : Vous pouvez affiner davantage les performances en ajustant la taille du lot et en optimisant les index de la base de données.

Conclusion

En implémentant cette technique d'insertion groupée, les développeurs peuvent améliorer considérablement l'efficacité de leurs opérations d'insertion de base de données MySQL. Cette méthode réduit le temps d'insertion, améliore les performances globales et garantit l'intégrité des données avec une mesure de sécurité supplémentaire.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn