


Comparaison des performances des méthodes d'insertion MySQL sous de gros volumes de données
Qu'il s'agisse de traitement quotidien de données professionnelles ou d'importation et d'exportation de bases de données, vous pouvez rencontrer des insertions qui nécessitent le traitement de grandes quantités de données. La méthode d'insertion et le moteur de base de données affecteront la vitesse d'insertion. Cet article vise à analyser et à comparer diverses méthodes d'un point de vue théorique et pratique pour faciliter la sélection des méthodes d'insertion dans les applications futures.
Analyse d'insertion
Le temps nécessaire pour insérer un enregistrement dans MySQL est composé des facteurs suivants, où les nombres représentent des proportions approximatives :
Connexion : (3)
Envoyer la requête au serveur : (2)
Analyser la requête : (2)
Insérer un enregistrement : (1x taille de l'enregistrement)
Insérer un index : (1x index)
Fermer : (1)
Si nous exécutons une instruction SQL à chaque fois que nous insérons un élément, alors nous devons exécuter toutes les étapes sauf la connexion et la fermeture N fois. Cela prend beaucoup de temps.
Écrivez plusieurs lignes dans chaque instruction d'insertion, insertion par lots
Écrivez toutes les instructions de requête dans la transaction
-
Utilisez Load Data pour importer des données
Les performances de chaque méthode sont les suivantes.
Moteur Innodb
InnoDB fournit à MySQL une table de type transaction (conforme à l'ACID), de restauration (rollback) et de récupération après incident (capacités de récupération après incident) sécurisée. InnoDB fournit des verrous de ligne (verrouillage au niveau de la ligne) et des contraintes de clé étrangère (contraintes FOREIGN KEY).
InnoDB est conçu pour gérer des systèmes de bases de données de grande capacité, et son utilisation du processeur est inégalée par les autres moteurs de bases de données relationnelles sur disque. Techniquement, InnoDB est un système de base de données complet placé sur l'arrière-plan MySQL. InnoDB établit son propre pool de tampons dédié dans la mémoire principale pour la mise en cache des données et des index.
Environnement de test
Macbook Air 12mid apache2.2.26 php5.5.10 mysql5.6.16
Total 1 million de données
Après l'insertion, la taille de la base de données est de 38,6 Mo (sans index), 46,8 (avec index)
Durée totale pour une insertion unique sans index : 229 s Mémoire maximale : 246 Ko
Insertion unique avec index Temps total pris : 242 s Mémoire maximale : 246 Ko
Temps total nécessaire pour l'insertion par lots sans index : 10 s Mémoire maximale : 8643 Ko
Insertion par lots avec index Temps total pris : 16 s Mémoire maximale : 8643 Ko
Temps total nécessaire pour l'insertion d'une transaction sans index : 78 s Mémoire maximale : 246 Ko
Insertion avec transaction indexée Temps total passé : 82s Mémoire maximale : 246 Ko
Chargement sans index Temps total consacré à l'insertion des données : 12s Mémoire maximale : 246 Ko
Charger avec index Temps total d'insertion des données : 11 s Mémoire maximale : 246 Ko
Moteur MyIASM
MyISAM est le moteur de stockage par défaut de MySQL. La conception est simple et prend en charge la recherche en texte intégral.
Environnement de test
Macbook Air 12mid apache2.2.26 php5.5.10 mysql5.6.16
Total 1 million de données
Après l'insertion, la taille de la base de données est de 19,1 Mo (sans index), 38,6 (avec index)
Durée totale pour une insertion unique sans index : 82 s Mémoire maximale : 246 Ko
Insertion unique avec index Temps total nécessaire : 86 s Mémoire maximale : 246 Ko
Temps total nécessaire pour l'insertion par lots sans index : 3 s Mémoire maximale : 8643 Ko
Insertion par lots avec index Temps total passé : 7s Mémoire maximale : 8643 Ko
Chargement sans index Temps total consacré à l'insertion des données : 6s Mémoire maximale : 246 Ko
-
Charger avec index Temps total d'insertion des données : 8s Mémoire maximale : 246 Ko
Résumé
La quantité de données que j'ai testée n'est pas très importante, mais je peux à peu près comprendre la vitesse de ces méthodes d’insertion. La méthode la plus rapide doit être la méthode Load Data. Cette méthode est relativement délicate car elle implique l'écriture de fichiers, mais elle peut prendre en compte à la fois la mémoire et la vitesse.
Code de test
<?php $dsn = 'mysql:host=localhost;dbname=test'; $db = new PDO($dsn,'root','',array(PDO::ATTR_PERSISTENT => true)); //删除上次的插入数据 $db->query('delete from `test`'); //开始计时 $start_time = time(); $sum = 1000000; // 测试选项 $num = 1; if ($num == 1){ // 单条插入 for($i = 0; $i < $sum; $i++){ $db->query("insert into `test` (`id`,`name`) values ($i,'tsetssdf')"); } } elseif ($num == 2) { // 批量插入,为了不超过max_allowed_packet,选择每10万插入一次 for ($i = 0; $i < $sum; $i++) { if ($i == $sum - 1) { //最后一次 if ($i%100000 == 0){ $values = "($i, 'testtest')"; $db->query("insert into `test` (`id`, `name`) values $values"); } else { $values .= ",($i, 'testtest')"; $db->query("insert into `test` (`id`, `name`) values $values"); } break; } if ($i%100000 == 0) { //平常只有在这个情况下才插入 if ($i == 0){ $values = "($i, 'testtest')"; } else { $db->query("insert into `test` (`id`, `name`) values $values"); $values = "($i, 'testtest')"; } } else { $values .= ",($i, 'testtest')"; } } } elseif ($num == 3) { // 事务插入 $db->beginTransaction(); for($i = 0; $i < $sum; $i++){ $db->query("insert into `test` (`id`,`name`) values ($i,'tsetssdf')"); } $db->commit(); } elseif ($num == 4) { // 文件load data $filename = dirname(__FILE__).'/test.sql'; $fp = fopen($filename, 'w'); for($i = 0; $i < $sum; $i++){ fputs($fp, "$i,'testtest'\r\n"); } $db->exec("load data infile '$filename' into table test fields terminated by ','"); } $end_time = time(); echo "总耗时", ($end_time - $start_time), "秒\n"; echo "峰值内存", round(memory_get_peak_usage()/1000), "KB\n"; ?>
Ce qui précède est l'analyse des performances et la comparaison de diverses méthodes pour insérer de grandes quantités de données dans MySQL. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois. (www.php.cn) !

La position de MySQL dans les bases de données et la programmation est très importante. Il s'agit d'un système de gestion de base de données relationnel open source qui est largement utilisé dans divers scénarios d'application. 1) MySQL fournit des fonctions efficaces de stockage de données, d'organisation et de récupération, en prenant en charge les systèmes Web, mobiles et de niveau d'entreprise. 2) Il utilise une architecture client-serveur, prend en charge plusieurs moteurs de stockage et optimisation d'index. 3) Les usages de base incluent la création de tables et l'insertion de données, et les usages avancés impliquent des jointures multiples et des requêtes complexes. 4) Des questions fréquemment posées telles que les erreurs de syntaxe SQL et les problèmes de performances peuvent être déboguées via la commande Explication et le journal de requête lente. 5) Les méthodes d'optimisation des performances comprennent l'utilisation rationnelle des indices, la requête optimisée et l'utilisation des caches. Les meilleures pratiques incluent l'utilisation des transactions et des acteurs préparés

MySQL convient aux petites et grandes entreprises. 1) Les petites entreprises peuvent utiliser MySQL pour la gestion des données de base, telles que le stockage des informations clients. 2) Les grandes entreprises peuvent utiliser MySQL pour traiter des données massives et une logique métier complexe pour optimiser les performances de requête et le traitement des transactions.

INNODB empêche efficacement la lecture des fantômes via le mécanisme de blocage à clé suivante. 1) Le blocage de touche suivante combine le verrouillage des lignes et le verrouillage de l'espace pour verrouiller les enregistrements et leurs lacunes pour empêcher l'insertion de nouveaux enregistrements. 2) Dans les applications pratiques, en optimisant la requête et en ajustant les niveaux d'isolement, la concurrence des verrouillage peut être réduite et les performances de la concurrence peuvent être améliorées.

MySQL n'est pas un langage de programmation, mais son langage de requête SQL a les caractéristiques d'un langage de programmation: 1. SQL prend en charge le jugement conditionnel, les boucles et les opérations variables; 2. Grâce aux procédures, déclencheurs et fonctions stockées, les utilisateurs peuvent effectuer des opérations logiques complexes dans la base de données.

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

MySQL est un système de gestion de base de données relationnel open source adapté au stockage, à la gestion, à la requête et à la sécurité des données. 1. Il prend en charge une variété de systèmes d'exploitation et est largement utilisé dans les applications Web et autres domaines. 2. Grâce à l'architecture client-serveur et à différents moteurs de stockage, MySQL traite efficacement les données. 3. L'utilisation de base comprend la création de bases de données et de tables, d'insertion, d'interrogation et de mise à jour des données. 4. L'utilisation avancée implique des requêtes complexes et des procédures stockées. 5. Les erreurs courantes peuvent être déboguées par le biais de la déclaration Explication. 6. L'optimisation des performances comprend l'utilisation rationnelle des indices et des instructions de requête optimisées.

MySQL est choisi pour ses performances, sa fiabilité, sa facilité d'utilisation et son soutien communautaire. 1.MySQL fournit des fonctions de stockage et de récupération de données efficaces, prenant en charge plusieurs types de données et opérations de requête avancées. 2. Adoptez l'architecture client-serveur et plusieurs moteurs de stockage pour prendre en charge l'optimisation des transactions et des requêtes. 3. Facile à utiliser, prend en charge une variété de systèmes d'exploitation et de langages de programmation. 4. Avoir un solide soutien communautaire et fournir des ressources et des solutions riches.

Les mécanismes de verrouillage d'InnoDB incluent des verrous partagés, des verrous exclusifs, des verrous d'intention, des verrous d'enregistrement, des serrures d'écart et des mèches suivantes. 1. Le verrouillage partagé permet aux transactions de lire des données sans empêcher d'autres transactions de lire. 2. Lock exclusif empêche les autres transactions de lire et de modifier les données. 3. Le verrouillage de l'intention optimise l'efficacité de verrouillage. 4. Enregistrement de l'indice de verrouillage d'enregistrement. 5. Écart d'enregistrement de l'indice des verrous de verrouillage de l'espace. 6. Le verrouillage de la touche suivante est une combinaison de verrouillage des enregistrements et de verrouillage de l'écart pour garantir la cohérence des données.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

ZendStudio 13.5.1 Mac
Puissant environnement de développement intégré PHP

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Version Mac de WebStorm
Outils de développement JavaScript utiles

VSCode Windows 64 bits Télécharger
Un éditeur IDE gratuit et puissant lancé par Microsoft