Quelles sont les performances des méthodes d'insertions ? - Conseil sur la base de données MySQL

Retour à l'accueil

Retour à la liste des conseils

Un des aspects de la gestion d'une base de données est celui de l'insertion d'enregistrements. Les méthodes mysql, mysqli, PDO et Doctrine ont leur spécifité pour l'ajout de ligne à une table. De plus, le type de champ, la quantité de donnée et les différentes indexations influent également sur les temps de traitement.

4 méthodes d'enregistrements de données seront testées ici : mysql, mysqli, PDO et Doctrine 1.2

Protocole


Les tests sont effectués sur une base de données mysql TEST contenant 2 champs : TEST_id (type INTEGER auto incrémenté) et TEST_data (types INTEGER ou VARCHAR(50) selon les cas).

La requête SQL pour l'ajout d'un enregistrement correspond à :

Dans le cas de l'ajout d'un entier composé de 8 chiffres :
"INSERT INTO TEST (TEST_data) VALUES (".$i.")"

Dans le cas de l'ajout d'une chaîne de caractères de 8 caractères de longueur :
"INSERT INTO TEST (TEST_data) VALUES ('".$i."')"

Pour que ne soient pris en compte que le temps de la requête d'insertion, un tableau d'insertion est créé avant la requête.

Les mesures de temps sont effectués selon le schéma suivant :

création du tableau des insertions;
connexion à la base;
mesure du temps 1;
requête d'insertion;
mesure du temps 2;

Chaque test est effectué 10 000 fois pour lisser les mesures et amoindrir l'impact des autres activités aléatoires de la machine.

Tests


1er test : insertion de 100 enregistrements d'un entier

Les tests d'insertion se font dans une table vide.

Résultats de l'ajout de 100 enregistrements d'un entier
L'ORM Doctrine se révèle ici être la méthode la plus lente.

Pour clarifier le graphique, l'intervalle d'affichage a été réduit entre 0 et 20 ms pour afficher les différences de durée de traitement pour mysql, mysqli et PDO.

Résultats détaillés de l'ajout de 100 enregistrements d'un entier
2ème test : insertion de 100 enregistrements d'une chaîne de caractères

Les tests d'insertion se font dans une table vide.

Résultats de l'ajout de 100 enregistrements d'une chaîne de caractères
Pour clarifier le graphique, l'intervalle d'affichage a été réduit entre 0 et 24 ms pour afficher les différences de durée de traitement pour mysql, mysqli et PDO.

Résultats détaillés de l'ajout de 100 enregistrements d'une chaîne de caractères
Premières conclusions

L'ORM Doctrine est 20 fois plus lent pour insérer des enregistrements. Les temps des 3 autres méthodes sont très proches. Néanmoins, sur les insertions d'une chaîne de caractères, PDO se révèle légèrement plus lent.
Ces tests ne révèlent les performances de chaque méthode que pour des tables initialement vides. Ce cas est relativement rare et est donc poursuivi par la reproduction des 2 premiers tests sur une table pré-remplie.

3ème test : insertion de 100 enregistrements d'un entier dans une table pré-remplie

Les tests d'insertion se font dans une table pré-remplie d'un million d'enregistrements.

Résultats de l'ajout de 100 enregistrements d'un entier
L'ORM Doctrine se révèle ici être la méthode la plus lente.

Pour clarifier le graphique, l'intervalle d'affichage a été réduit entre 0 et 24 ms pour afficher les différences de durée de traitement pour mysql, mysqli et PDO.

Résultats détaillés de l'ajout de 100 enregistrements d'un entier dans une table pré-remplie
La logique des résultats des tests précédents est respectée. Doctrine est toujours la méthode la plus lente. Les 3 autres méthodes effectuent le travail dans le même temps.

Par rapport au test 1, ces 3 méthodes nécessitent 2 millisecondes de plus soit une augmentation de 10%.

4ème test : insertion de 100 enregistrements d'une chaîne de caractères dans une table pré-remplie

Les tests d'insertion se font dans une table pré-remplie d'un million d'enregistrements.

Résultats de l'ajout de 100 enregistrements d'une chaîne de caractères dans une table pré-remplie
L'ORM Doctrine se révèle ici être la méthode la plus lente.

Pour clarifier le graphique, l'intervalle d'affichage a été réduit entre 0 et 24 ms pour afficher les différences de durée de traitement pour mysql, mysqli et PDO.

Résultats détaillés de l'ajout de 100 enregistrements d'une chaîne de caractères dans une table pré-remplie
Les résultats du test 2 sont similaires. Les 3 méthodes sont très proches même si PDO se est un peu plus lent comme lors du 2ème test. PDO nécessite plus de ressources pour gérer les insertions de chaînes de caractères. La différence par rapport à mysql et mysqli est ici de 3 millisecondes soit 12,5%.

Le temps supplémentaire pour les insertions sur une table pré-remplie est de 2 millisecondes soit une augmentation de 10%.

Conclusions


Quelque soit les types d'insertions (entier ou chaîne de caractères), Doctrine demande 20 fois plus de temps pour effectuer la même tâche.

Les performances de mysql, mysqli et PDO sont similaires.

Le travail sur une table non vide demande 10% de ressources supplémentaires.

PDO est plus lent que mysql et mysqli quand il s'agit d'insérer un chaîne de caractère.

Version classique - Contact - Règles de confidentialité