Maison  >  Article  >  base de données  >  Comment optimiser la copie groupée de tables de données dans MySQL à l'aide d'un fichier CSV temporaire ?

Comment optimiser la copie groupée de tables de données dans MySQL à l'aide d'un fichier CSV temporaire ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-24 06:11:02701parcourir

How to Optimize Bulk Copying DataTables into MySQL Using a Temporary CSV File?

Copie en masse d'un DataTable dans MySQL à l'aide d'un fichier CSV temporaire

Lors de la migration vers MySQL à partir de Microsoft SQL Server, vous pouvez rencontrer des problèmes avec la migration en masse vers MySQL copie à l'aide d'une écriture directe DataTable. Bien que la classe SqlBulkCopy ne soit pas disponible nativement dans MySQL, il vaut la peine d'envisager d'utiliser un fichier CSV temporaire comme intermédiaire pour des performances optimales.

Une hypothèse à éviter est que le chargement groupé via un fichier CSV entraînera intrinsèquement de mauvaises performances. performance. Des tests empiriques ont montré que l'utilisation de la classe MySqlBulkLoader peut réduire considérablement les temps d'insertion par rapport aux mises à jour directes via un MySqlDataAdapter.

Pour y parvenir, suivez ces étapes :

  1. Écrivez le contenu de DataTable dans un fichier CSV temporaire à l'aide d'un rédacteur CSV approprié.
  2. Initialisez un nouvel objet MySqlBulkLoader et définissez ses propriétés :

    • TableName pour qu'il corresponde à la table cible
    • FileName pour pointer vers le fichier CSV
    • FieldTerminator et FieldQuotationCharacter selon les besoins
  3. Appelez la méthode Load() pour charger en bloc les données du fichier CSV
  4. Supprimez le fichier CSV temporaire une fois le chargement terminé

Exemple de code :

<code class="csharp">string tempCsvFileSpec = @"C:\Users\Gord\Desktop\dump.csv";
using (StreamWriter writer = new StreamWriter(tempCsvFileSpec))
{
    Rfc4180Writer.WriteDataTable(rawData, writer, false);
}
var msbl = new MySqlBulkLoader(conn);
msbl.TableName = "testtable";
msbl.FileName = tempCsvFileSpec;
msbl.FieldTerminator = ",";
msbl.FieldQuotationCharacter = '"';
msbl.Load();
System.IO.File.Delete(tempCsvFileSpec);</code>

En tirant parti de la classe MySQLBulkLoader et d'un fichier CSV temporaire, vous pouvez réaliser une copie en masse efficace de DataTables dans MySQL avec des performances améliorées par rapport aux mises à jour directes.

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